从结构中获取所有可变参数模板类型,该结构是函数模板中的类型参数
Get all variadic template types from a struct which is a type parameter in function template
这是一个最小的例子:
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
将 return 为真,前提是所有 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);
}
这是一个最小的例子:
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
将 return 为真,前提是所有 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);
}