模板extern(vs extern模板)

Mar*_*k S 6 c++ templates c++11

我遇到过这样的代码:

template<class T> extern void f(T a);
Run Code Online (Sandbox Code Playgroud)

在.h文件中,f()在cpp文件中定义了几个特定的​​T.

我无法找到有关此语法的任何解释.我已经看到extern模板是在c ++ 11中引入的,但它们似乎有不同的语法......

有人可以详细说明吗?

谢谢

Rei*_*ica 7

extern这里是多余的.这意味着从该模板实例化的函数具有外部链接.这是正常的extern,你要申请一个普通的函数定义,以表明它具有外部链接.这也是多余的,因为默认情况下函数具有外部链接.所以它是一样的

template <class T> void f(T a);
Run Code Online (Sandbox Code Playgroud)

您已经提到过几个明确的实例化(或者可能是专业化,您的问题不清楚)在.cpp文件中定义.这仍然与使用的extern关键字无关,也可以在没有它的情况下完成.

  • @MarkS我说'extern`在这里没有任何意义,如果你使用(在另一个翻译单元中)未在`.cpp`文件中明确定义的特殊化,你可以获得链接器错误,该文件可以访问模板的定义.规则总是相同的:要么翻译单元需要访问模板的定义,要么必须在链接器可以到达的位置定义显式实例化/特化. (2认同)