这是一个最小的例子:
template<typename ...Types>
struct Pack {};
template<typename ...TemplateTemplateTypes>
bool AllConstructible()
{
return (std::is_constructible_v
</*do something to archive all types in every TemplateTemplateType*/>
and ... and true);
}
struct Empty{};
int main()
{
std::cout << std::boolalpha << AllConstructible<Pack<int, const int&>, Pack<Empty>>();
}
函数AllConstructible
将返回 true iif 所有 is_constructible_v<Pack's Types>
坚持下去。
在Pack
的定义里面很容易实现所有类型(只用Types...
),但在外面怎么办呢?
最佳答案
您可以侵入一个无法解压参数的辅助模板:
template<typename ...Types>
struct Helper;
template<typename ...Types>
struct Helper<Pack<Types...>>
{
static constexpr bool value{std::is_constructible_v<Types...>};
};
template<typename ...TemplateTemplateTypes>
bool AllConstructible()
{
return (Helper<TemplateTemplateTypes>::value and ... and true);
}
关于c++ - 从结构中获取所有可变参数模板类型,该结构是函数模板中的类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55773659/