自由模板函数需要静态和内联吗?

cod*_*der 4 c++ templates

鉴于此代码

// 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% 关于模板生成机制(即它是否将其复制/粘贴到每个翻译单元中? )

Mil*_*nek 7

所有函数模板都是inline默认的,因此不需要关键字。

static在转换my_func为模板之前,该关键字可能是不必要的,而且可能仍然是不必要的。标记一个自由函数static会给出其名称内部链接,但由于它是在标头中声明的,因此在这里并没有多大作用。任何翻译单元都可以简单地使用#include您的标题并无论如何都可以访问该功能。 static函数在 .cpp 文件中更有用,它本质上是将函数标记为内部函数并防止其他翻译单元调用它。