我有一个模板类型:
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.
如何实现这一点(如果实例化不正确,编译器标记错误)?
答案 0 :(得分:2)
我能想象的解决方案是将元组包装在可变参数模板struct(或类)中
#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;
}
答案 1 :(得分:2)
您可以使用类型别名:
template<class ...Args>
using shadow_tuple = std::tuple<Shadow<Args>...>;
int main()
{
shadow_tuple<int, double> xx;
return 0;
}