我讨厌样板文件,并且不要在C ++中传统的类声明中重复自己的违规行为。
是否可以创建一个没有模板参数的模板,纯粹是为了在头文件中定义类而不违反一个定义规则,在C ++ 11中?
答案 0 :(得分:2)
无需任何模板。
如果你想编写一个只有头的类,你所要做的就是将inline
标记为将在类声明外部定义的函数:
#pragma once
struct some_class {
void implicitly_inline() { ... }
inline void explicitly_inline();
};
void some_class::explicitly_inline() { ... }
偶尔使用额外的inline
关键字几乎不会改变您班级的整个定义。
答案 1 :(得分:2)
是否可以创建没有模板参数的模板
没有。而且你不需要这样的解决方法,因为......
启用在头文件中定义类而不违反一个定义规则
您可以在不违反单一定义规则的情况下在头文件中定义类。
你甚至可以在标题中定义一个类的成员函数 - 我认为这是这个问题的重点。只需将它们全部声明inline即可。如果在类定义中定义成员函数,则它们是隐式内联的。
只要每个定义出现在不同的翻译单元中,程序中的内联函数可能有多个定义。例如,可以在多个源文件中#include'd的头文件中定义内联函数。