Унарный побитовый или сложенный в конструкторе bitset - PullRequest
0 голосов
/ 28 июня 2018

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

Вот мой код:

template<uint8_t ID_in, uint8_t...categories_in>
struct Function_Data {

    static constexpr const uint8_t ID = ID_in;

    // only two categories so far
    static constexpr const bitset<2> categories(categories_in|...);

    constexpr inline explicit Function_Data() {}
};

Я ожидаю, что синтаксический анализ categories(categories_in|...) поймет, что я пытаюсь использовать операцию сгиба, но я получаю ошибку ‘categories_in’ is not a type, а затем expected ',' or '...' before '|' токен.

Попытка строки categories(...|categories_in) дает разные, но похожие сообщения вида "ожидал X вместо Y".

Использование статического приведения к unsigned long long int (для типа параметра конструктора) приводит к expected identifier before static cast, что выглядит странно, поскольку прямо перед именем есть имя.

Буду признателен за любую помощь в получении структуры.

1 Ответ

0 голосов
/ 28 июня 2018

Вам нужны дополнительные скобки для кратного выражения :

static constexpr const bitset<2> categories{(categories_in|...)};

И, поскольку вы находитесь в определении класса, используйте {} (или = bitset<2>((categories_in|...))) вместо () для создания членов.

...