1

如何专门化元组的类模板?我尝试以下但失败了。我正在使用 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 编译器错误。如果是这样,如何解决?

4

1 回答 1

1

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

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

活生生的例子

是的,您必须对代码可能使用的尽可能多的参数执行此操作。或者,您可以尝试可能已修复此错误的VS 2013 RC 。

更新:我现在看到你问了一个关于变通方法的单独问题。在那里发布了相同的解决方案。

于 2013-10-03T08:53:32.573 回答