c – 班级外的模板定义

c – 班级外的模板定义,第1张

概述是吗在其身体之外定义模板的虚拟功能?虚拟函数不能内联,但为避免编译单元中的多个定义,它们将被内联标记(假设模板头将包含在多个源文件中).另一方面,编译器可以自由地忽略内联,所以这似乎是有效的.例如,下面的代码正确: template <typename T>class C{public: virtual void f(T val);};template <typename T 是吗在其身体之外定义类模板的虚拟功能?虚拟函数不能内联,但为避免编译单元中的多个定义,它们将被内联标记(假设模板头将包含在多个源文件中).另一方面,编译器可以自由地忽略内联,所以这似乎是有效的.例如,下面的代码正确:
template <typename T>class C{public:    virtual voID f(T val);};template <typename T>inlinevoID C<T>::f(T val){  //deFinition}

BTW gcc(3.4.2)允许在定义函数f(T val)之前省略内联,但在常规类的类似功能之前不允许内联.这只是gcc的行为吗?

解决方法 是的,即使没有内联也行.它对普通成员函数和静态变量的工作原理相同:
// everything in the header:template <class T>class A{  static int i;};template <class T>int A<T>::i=0;

标准报价:(3.2 / 5)

There can be more than one definition of a class type (Clause 9),enumeration type (7.2),inline function with
external linkage (7.1.2),class template (Clause 14),non-static function template (14.5.6),static data member
of a class template (14.5.1.3),member function of a class template (14.5.1.1),or template specialization for
which some template parameters are not specified (14.7,14.5.5) in a program provIDed that each definition
appears in a different translation unit,and provIDed the definitions satisfy the following requirements …

要求基本上说这两个定义必须相同.

它不适用于常规课程.整个计划中最多只有一个定义.

总结

以上是内存溢出为你收集整理的c – 班级外的模板定义全部内容,希望文章能够帮你解决c – 班级外的模板定义所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1249522.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存