如何使用可变参数模板参数专门化元组的类模板?

时间:2013-10-03 03:02:20

标签: c++ templates visual-c++ visual-studio-2012 tuples

如何为元组专门化一个类模板?我尝试以下但失败了。我正在使用VC Compiler Nov 2012 CTP,它支持可变参数模板参数。

template<class T>
struct A
{
   void f() {}
};

template<class... Args>
struct A<tuple<Args...>>
{
   void g() {}
};

我试试

A<tuple<int, float>> a;
a.g(); // error error C2039: 'g' : is not a member of 
//'A<std::tuple<int,float,std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil>>

感谢yngum。它可能是VC编译器错误。如果是这样,如何解决?

1 个答案:

答案 0 :(得分:1)

这是一个编译器错误。作为解决方法,只需添加2参数专业化

即可
template<class Arg0, class Arg1>
struct A< std::tuple<Arg0, Arg1> >
{
   void g() {}
};

Live Example

是的,您必须为代码可能使用的参数执行此操作。或者,您可以尝试VS 2013 RC,这可能已经解决了这个问题。

更新:我现在看到您向a separate question询问了解决方法。那里发布了相同的解决方案。

相关问题