使用额外的模板参数编译函数
Compiling a function with extra template parameter
我有以下代码:
文件main.cpp:
#include <iostream>
#include "A.h"
class X{};
int
main()
{
X x;
A<X> a(x);
}
文件A-inl.h
#include <iostream>
template <class T1>
A<T1>::A(T1 t)
{
}
template <class T1>
void A<T1>::foo(T1 t1)
{
}
template <class T1, class T2>
void A<T1>::bar(T1 t, T2 t2) // Compilation Problem
{
}
文件A.h
template <class T1>
class A
{
public:
explicit A(T1 t1);
void foo(T1 t1);
template <class T2>
void bar(T1 t1, T2 t2); // Compilation Problem
};
#include "A-inl.h"
g++-g main.cpp
In file included from A.h:11:0,
A-inl.h:14:6: error: prototype for ‘void A<T1>::bar(T1, T2)’ does not match any in class ‘A<T1>’
void A<T1>::bar(T1 t, T2 t2)
^
In file included from main.cpp:3:0:
A.h:8:10: error: candidate is: template<class T1> template<class T2> void A<T1>::bar(T1, T2)
void bar(T1 t1, T2 t2);
你们能告诉我酒吧该怎么申报吗?还有一个问题是,如果在,我可以创建一个对象a;我不知道T2是什么类型的酒吧?条形码将如何生成。
感谢
您的头声明是可以的;但请尝试在函数定义的内联文件中执行此操作。
template<class T1>
template<class T2>
void A<T1>::bar( T1 t, T2 t2 ) {
}
它现在解析、编译和构建;至少在Visual Studio 2015社区中是这样。
这不起作用:
template<class T1, class T2>
void A<T1>::bar( T1 t, T2 t2 ) {
}
因为您的头声明与内联函数定义不匹配,所以这就是您在类模板中声明模板函数的方式:
template<class T2>
void bar( T1 t, T2 t2 );
这就是为什么您需要声明类模板所需的template<class T1>
,然后您需要为您的模板函数声明template<class T2>
,就像您在类模板中声明它一样。
相关文章:
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- C++模板-基于参数编译成员函数
- 无法使用模板参数编译提升元状态机
- lambda 和映射,引用参数 - 编译错误
- 为什么在函数参数编译中没有标识符的const关键字
- 无法使用模板参数编译类
- 数组作为函数参数 - 编译错误
- 使用 "using declaration" 扩展非类型模板参数包(模板可变参数编译时 SignalSlot 实现)
- 在 gcc 中使用数组参数编译外部"c"代码
- 为什么对齐的参数编译正确,但在运行时崩溃
- GCC上的亚型参考参数编译错误
- 是否可以将addr2line与使用发布优化参数编译的应用程序一起使用
- 尝试使用可变参数编译代码时出错
- C++ 线程获取引用参数编译失败
- 使用额外的模板参数编译函数
- 使用静态模板函数的默认参数编译错误
- 函数模板参数编译错误
- 谷歌模拟成员函数中的std::pair参数编译失败
- 模板模板参数-编译错误
- 防止基于模板参数编译函数(或部分函数)