如何通过使用可变模板参数来专门化元组的类模板?
Posted
技术标签:
【中文标题】如何通过使用可变模板参数来专门化元组的类模板?【英文标题】:How to specialize a class template for a tuple by using variadic template arguments? 【发布时间】:2013-10-03 03:02:19 【问题描述】:如何为一个元组专门化一个类模板?我尝试以下但失败了。我正在使用 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 编译器错误。如果是这样,如何解决?
【问题讨论】:
编译器错误。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 CTP 编译器。这是编译器的错误吗?
@user1899020 VC 不喜欢可变参数模板,很可能是一个错误。
重新标记,因为它是特定于平台的错误。
【参考方案1】:
这是一个编译器错误。作为一种解决方法,只需添加 2 参数专业化
template<class Arg0, class Arg1>
struct A< std::tuple<Arg0, Arg1> >
void g()
;
Live Example.
是的,您必须为代码可能使用的尽可能多的参数执行此操作。或者,您可以尝试VS 2013 RC,它可能已修复此错误。
更新:我现在看到您向a separate question 询问了解决方法。那里发布了相同的解决方案。
【讨论】:
以上是关于如何通过使用可变模板参数来专门化元组的类模板?的主要内容,如果未能解决你的问题,请参考以下文章