C++ 从结构中获取所有可变模板类型,该结构是函数模板中的类型参数
下面是一个简单的例子:C++ 从结构中获取所有可变模板类型,该结构是函数模板中的类型参数,c++,templates,template-meta-programming,typetraits,C++,Templates,Template Meta Programming,Typetraits,下面是一个简单的例子: template<typename ...Types> struct Pack {}; template<typename ...TemplateTemplateTypes> bool AllConstructible() { return (std::is_constructible_v </*do something to archive all types in every TemplateTempla
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>>();
}
模板
结构包{};
模板
bool-AllConstructible()
{
返回(std::是否可构造
而且……而且是真的);
}
结构空{};
int main()
{
std::cout您可以侵入一个帮助器模板,该模板将解包参数:
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);
}
模板
结构助手;
模板
结构辅助程序
{
静态constexpr布尔值{std::is_constructible_v};
};
模板
bool-AllConstructible()
{
返回(Helper::value和…以及true);
}
Whyreturn(std::is\u constructible\u v和…和true)
不起作用?@VTT它可以编译,但结果不是真的,因为它只会判断Pack
是否可以构造,而不是它的模板类型:std::cout所以你想检查int
、const int&
和Empty
是可构造的吗?不。的签名是可构造的
istemplatestruct是可构造的;
我想检查int是否可从const int&
构造,Empty
可从空参数构造,int
不应从Empty