VC ++ Variadic-Template-Template错误C2244:无法将函数定义与现有声明匹配

时间:2012-11-17 17:55:53

标签: c++ c++11 visual-studio-2012 variadic-templates template-templates

这可能是一个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>这就是我的意思

1 个答案:

答案 0 :(得分:0)

From MSDN regarding Compiler Error C2244

  

您不能部分专门化功能模板。

我还认为你必须在课堂前声明template

template<typename T>
class MyClass
{
};