如何检查类型是一个给定的模板类型
我有一个模板类型:如何检查类型是一个给定的模板类型
template<class T>
struct Shadow {
T field[100];
};
我想创建一个tuple
,它的类型是Shadow
实例,但不应该允许任何其他类型。例如,
tuple< Shadow<int>, Shadow<double> > x; // correct instantiation.
tuple< Shadow<int>, double > x; // incorrect instantiation.
我该如何做到这一点(并且在不正确的实例化的情况下编译器标记错误)?
,我可以想像的包裹元组的可变参数模板结构(或类)中的溶液
#include <tuple>
template <typename T>
struct Shadow
{ T field[100]; };
template <typename ... Ts>
struct wrapTShadow
{ std::tuple<Shadow<Ts>...> val; };
int main()
{
// contain a std::tuple<Shadow<int>, Shadow<double>>
wrapTShadow<int, double> wts;
}
感谢您的建议。你能告诉我std :: tuple
@ user1205476 - 你必须区分'std :: tuple
@ user1205476 - ps:在alangab的解决方案中:它基于相同的想法,但是避免了包装结构的需要。更简单,更优雅,(我怀疑)更高效 – max66
你可以使用类型别名:
template<class ...Args>
using shadow_tuple = std::tuple<Shadow<Args>...>;
int main()
{
shadow_tuple<int, double> xx;
return 0;
}
是'tuple'了'性病:: tuple'或你定义的类? – kennytm
它不需要是std :: tuple,我可以包装。 – user1205476