这可能是新手的错误,我正在使用 Microsoft Visual C++ Compiler Nov 2012 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>
这就是我的意思