gpt4 book ai didi

c++ - 在类内部和外部定义的模板类的成员函数之间的区别

转载 作者:可可西里 更新时间:2023-11-01 17:58:04 27 4
gpt4 key购买 nike

在类声明内部和外部为模板类定义成员函数有区别吗?

内部定义:

template <typename T>
class A
{
public:
void method()
{
//...
}
};

在外部定义:

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

template <typename T>
void B<T>::method()
{
//...
}

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

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

编辑:请假设类的头文件中提供了上述所有代码。

最佳答案

是的,模板类也是如此。

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

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

关于c++ - 在类内部和外部定义的模板类的成员函数之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2103614/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com