鉴于此代码
// In header file
template<typename T>
inline static void my_func(T var)
{
std::cout << var << std::endl;
}
// Used in many cpp files:
void some_function()
{
my_func(1);
my_func("test");
}
Run Code Online (Sandbox Code Playgroud)
我刚刚将我的免费功能“升级”为模板。之前它是静态的和内联的。但现在它是一个模板,如果内联和静态仍然适用,我不是 100% - 我猜它们是这样......但我不是 100% 关于模板生成机制(即它是否将其复制/粘贴到每个翻译单元中? )
所有函数模板都是inline
默认的,因此不需要关键字。
static
在转换my_func
为模板之前,该关键字可能是不必要的,而且可能仍然是不必要的。标记一个自由函数static
会给出其名称内部链接,但由于它是在标头中声明的,因此在这里并没有多大作用。任何翻译单元都可以简单地使用#include
您的标题并无论如何都可以访问该功能。 static
函数在 .cpp 文件中更有用,它本质上是将函数标记为内部函数并防止其他翻译单元调用它。