Я пытаюсь сделать структуру, которая инкапсулирует некоторую информацию о функциях. В него включен набор битов, представляющий определенные истинные / ложные поведения. Я пытаюсь сложить пакет параметров в конструктор набора битов, но это не удается.
Вот мой код:
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
, который чувствует себя странно, так как есть имя прямо раньше.
Любая помощь, заставляющая структуру работать, будет оценена.
Вам нужны дополнительные скобки для сложить выражение:
static constexpr const bitset<2> categories{(categories_in|...)};
И, как вы находитесь в определении класса, используйте {}
(или же = bitset<2>((categories_in|...))
) вместо ()
построить членов.
Других решений пока нет …