模板化类定义的适当位置

Proper Place to Put Definition of Templated Class Definition

本文关键字:位置 定义      更新时间:2023-10-16

在类的磅定义之外定义类是合适的,还是在磅定义内定义?下面是我所问问题的例子。

#ifndef CLASS
#define CLASS
template <typename T>
Class 
{
    Class();
};
template <typename T>
Class::Class()
{
}
#endif

——或

#ifndef CLASS
#define CLASS
template <typename T>
Class 
{
    Class();
};
#endif
template <typename T>
Class::Class()
{
}

我将在包含保护符(磅定义)中定义它,以避免重复定义符号。所以对于模板类,就像你的例子一样,我总是在include保护中定义它,因为它们总是必须在头文件中定义。

对于其他非模板类,我可能在源文件(.cpp)中定义成员函数,因此这显然不在include保护之外。

作为脚注,我还指出,对于这样一个简单的构造函数,我实际上会在类声明中定义它,甚至根本不定义它,但我猜您的实际代码比给出的示例要复杂一些。