boost: vector256.hpp: нет такого файла или каталога

#c #boost #cmake

#c #boost #cmake

Вопрос:

Я использую boost 1.66 в Ubuntu 16.04 и cmake 3.9.5. Я сталкиваюсь со следующей ошибкой, когда выполняю рефакторинг кода моего приложения, а не boost 🙂 :

 usr/include/boost/mpl/vector.hpp:37:1: fatal error: boost/mpl/vector/vector256.hpp: No such file or directory
 #   include BOOST_PP_STRINGIZE(boost/mpl/vector/AUX778076_VECTOR_HEADER)
  

похоже, AUX778076_VECTOR_HEADER это vector256.hpp здесь? И действительно, в vector256.hpp boost/mpl/vector/ реж. такого нет.

Вероятно, причиной этого стала моя работа по рефакторингу, но я не трогал никаких файлов cmake, и все, что я сделал, это извлек некоторые общие части из кода, чтобы сделать его базовым классом.

Кто-нибудь мог бы пролить свет на это?

Вы можете найти это vector.hpp здесь: https://www.boost.org/doc/libs/1_52_0/boost/mpl/vector.hpp

РЕДАКТИРОВАТЬ: Это модули, которые я включаю для этого set( ${PROJECT_NAME}_BOOST_COMPONENT_DEPENDENCIES thread system filesystem date_time program_options ) . Я что-то пропустил?

Ответ №1:

Дистрибутив MPL включает в себя только до 50 с чем-то (не помню точно, сколько) записей списка типов для предварительно обработанных векторов (и других контейнеров списка типов).

Если вам нужны более длинные векторы, вам придется создавать эти файлы самостоятельно — к счастью, это просто копирование / вставка.

Комментарии:

1. Я немного запутался. Вы говорите, 256 это количество «записей списка типов для предварительно обработанных векторов»?

2. @Генри, просто по соглашению, но да.

3. Я не понимаю, почему это имеет значение в моем случае. В моем коде нет логических изменений или новых функций, почему раньше это не было проблемой?

4. @Henry Я понятия не имею, что вы сделали со своим кодом и как вы его изменили. Я знаю, что это имеет место с предварительно обработанными векторами в MPL. Может быть, вы раньше не использовали предварительно обработанные векторы?

5. Я их использовал. Я не добавлял никакого векторного кода, хотя я переместил часть векторного кода. Вектор выглядит следующим образом: struct transition_table : boost::mpl::vector<.....>{} . Я не менял типы в нем, их намного меньше 50.