VC++ 可变模板模板错误 C2244:无法将函数定义与现有声明匹配
VC++ Variadic-Template-Template error C2244: unable to match function definition to an existing declaration
这可能是
新手的错误,我正在使用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 连接 ID :771567 提交错误报告
向量示例也很糟糕(它会给出<std::_Simple_types<int>,std::_Vector_val>
,但它确实可以编译),但是如果您尝试使用一对和模板参数:
template <class F, class G, template <class,class> class T>
你会得到<F,G,std::pair>
这就是我的意思
来自 MSDN 关于编译器错误 C2244:
不能部分专用化函数模板。
我还认为你必须在全班面前声明template
:
template<typename T>
class MyClass
{
};
相关文章:
- 如何确保C++函数在定义之前声明(如override关键字)
- 为什么在定义函数之前先声明它
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- Visual Studio中的函数声明和函数定义问题
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 如何在标头中声明(或定义)函数的问题
- 程序顶部的声明与定义(最佳实践)
- 类的前向声明之后的类成员函数定义,在类声明之前
- 静态变量声明和定义
- C++ G++ 编译器 - 错误:隐式声明的定义
- C++:错误重定义和先前声明
- 类模板静态数据成员定义/声明/初始化
- 只有一个定义/声明时标头声明变量的多堆定义错误
- OpenCV - Ptr 语法和类定义/声明 - 混淆?
- 如何为非类型模板类的专用化定义声明之外的方法
- 我如何防止静态类成员变量需要两个定义/声明
- 默认定义声明的详细程度不完整
- C++:非成员函数的定义/声明的位置
- 将比较操作符的重载定义/声明为库中的非成员函数
- C++头重新定义/声明混合