在CPP文件中使用IMPLICIT实例化而不是.H来为类成员函数放置C ++模板定义?

Dong Shi

给定如下代码:

foo.cpp

#include"foo.h"

template <int X>
void bar::foo(){
 cout << X << endl;
}

static void tea(){
 bar().foo<1>();
 bar().foo<2>();
 bar().foo<3>();
}

foo.h

class bar {
 public:
  template <int X>
  void foo();
};

main.cpp

...
bar().foo<1>();
bar().foo<2>();
bar().foo<3>();
...

任何版本的C ++是否都允许这种模式?

编辑:

当显式实例化template void bar::foo<1>()(和等)允许其正确链接时,为什么不允许这样做?

乐园

除非您使用extern声明强制使用C ++编译器,否则实际上不需要为任何对象生成符号。它们积极地内联函数,这可能会删除实例化的所有证据。我尝试了您的示例,它与关联-O0,但与无关-O3

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在C ++中,为什么不能使用另一个类的模板类型来与模板类成员函数成为朋友?

将C ++模板函数定义存储在.CPP文件中

模板类成员函数实例化

为特定的模板方法实例定义别名

如何在类外的签名中使用模板参数的嵌套类型定义模板类函数

C ++-专门化类模板的成员函数

在模板类中定义模板化的朋友函数

C ++-14使用enable_if_t选择以整数类型为模板的类的成员函数

具有未定义的成员函数返回类型的模板实例化

如何与“模板使用”定义的模板(别名)类交朋友?

如何使用非跟踪的decltype返回类型定义离线类模板成员函数

从模板化类的子类访问定义

如何为模板化类的模板化函数定义模板专业化

尽管存在显式实例化,但类模板的成员函数模板找不到定义。不连结

模板类成员使用类本身作为模板参数时发生未定义的类错误

类模板静态数据成员的定义/声明/初始化

成员函数的C ++条件模板类定义

在模板化类之外定义非模板函数

如何使用enable_if对模板类成员进行离线定义

如何在.cpp文件中定义模板成员函数的显式特化

使用成员函数中使用的两个模板在类模板中定义成员函数的单个模板

在源文件中放置模板成员函数的专业化定义(没有默认主体)是否安全?

如何使用C ++模板中定义的类型?

模板类数组定义不是类型名称,静态或枚举C ++

类定义之外的部分模板专业化定义

使用类成员变量来保存内部结构定义中的函数,这些内部函数将用作unordered_map对象的模板参数

如何定义模板类的模板

无法理解使用模板的函数定义

定义模板化类函数的错误