这可能是一个newb的错误,我正在使用Microsoft Visual C ++编译器2012年11月的CTP,当我尝试编译它时:
#include <tuple>
class A
{
public:
template <class... Fs, template <class...> class T>
void foo(T<Fs...>);
};
template <class... Fs, template <class...> class T>
void A::foo(T<Fs...>)
{
}
int main()
{
A a;
a.foo(std::make_tuple(10,10));
}
我收到以下错误:
error C2244: 'A::foo' : unable to match function definition to an existing declaration
definition
'void A::foo(T<Fs...>)'
existing declarations
'void A::foo(T<Fs...>)'
如果我内联它编译的函数并执行我想做的事情,但我必须将函数放在头文件中
但是下面的代码编译没有错误:
#include <vector>
class A
{
public:
template <class Fs, template <class> class T>
void foo(T<Fs>);
};
template <class Fs, template <class> class T>
void A::foo(T<Fs>)
{
}
int main()
{
A a;
a.foo(std::vector<int>());
}
所以问题是如何使用可变参数模板实现相同的功能
修改
正如建议在Microsoft Connect上使用ID :771567
提交错误报告另外,矢量示例很糟糕(它会给<std::_Simple_types<int>,std::_Vector_val>
,但它会编译),但如果你尝试使用一对和模板参数:
template <class F, class G, template <class,class> class T>
你会得到<F,G,std::pair>
这就是我的意思
答案 0 :(得分:0)
From MSDN regarding Compiler Error C2244:
您不能部分专门化功能模板。
我还认为你必须在课堂前声明template
:
template<typename T>
class MyClass
{
};