При указании пакетов параметров для типа я хочу иметь возможность принимать не только typename
, но и значения произвольных типов. Пример:
template <thing... Things>
// ^^^^^ <- pseudo code
struct Example {};
Example<int,bool>();
Example<4,float,'x'>();
Ясно, что thing
не является допустимым ключевым словом C++, но возможна ли идея, выраженная здесь?
Контекст для этого заключается в том, что у меня есть адаптер контейнера, который хочет вставить свой собственный тип значения в контейнер, но позволяет передавать любые дополнительные параметры шаблона, а некоторые контейнеры получают не только аргументы типа, но и значения (std::array
будет популярным примером) .
template <template <typename...> typename Container, typename... Args>
struct Adapter {
struct Node { /* ... */ };
Container<Node,Args...> container;
};
Adapter<std::vector>(); // fine
Adapter<std::vector,MyAllocator>(); // fine
Adapter<std::array,3>(); // nope because 3 is not a typename
3
, аstd::integral_constant<int, 3>
). - person max66   schedule 20.08.2020integral_constant
, но для этого потребовалось бы, чтобы базовые типы принимали это, чего (например)std::array
нет. И не могло быть даже перегрузки по той же причине. - person bitmask   schedule 20.08.2020void *
, а затем попытаться прочитать его как все возможные значения, чтобы найти допустимые? В противном случае попробуйте это - person Sarwagya   schedule 20.08.2020