在类的内部和外部定义的模板类的成员函数之间的差异

Ben*_*Ben 9 c++ templates inline class

在类声明中定义模板类的成员函数与外部之间是否存在差异?

内部定义:

template <typename T>
class A
{
public:
    void method()
    {
        //...
    }
};
Run Code Online (Sandbox Code Playgroud)

在外面定义:

template <typename T>
class B
{
public:
    void method();
};

template <typename T>
void B<T>::method()
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

对于非模板类,这是内联和非内联方法之间的区别.模板类也是如此吗?

我的大多数同事的默认设置是在类中提供定义,但我总是更喜欢类外的定义.我的偏好是否合理?

编辑:请假设所有上述代码都在该类的头文件中提供.

jal*_*alf 5

是的,模板类也是如此。

模板类的方法定义通常首选内联的原因是对于模板,在实例化模板时整个定义必须是可见的。

因此,如果将函数定义放在某个单独的 .cpp 文件中,则会出现链接器错误。唯一的通用解决方案是使函数内联,通过在类内部或外部使用inline关键字定义它。但在任何一种情况下,它都必须在调用函数的任何地方可见,这意味着它通常必须与类定义位于同一标头中。