我讨厌这种样板,不要重复C++中传统类声明中固有的违规行为。
在C++11中,有没有可能创建一个没有模板参数的模板,纯粹是为了在不违反One Definition规则的情况下在头文件中定义类?
发布于 2015-10-29 23:29:15
不需要任何模板。
如果你想写一个只有头的类,你所要做的就是将定义在类声明外部的函数标记为inline:
#pragma once
struct some_class {
void implicitly_inline() { ... }
inline void explicitly_inline();
};
void some_class::explicitly_inline() { ... }偶尔额外的inline关键字几乎不会成为更改类的整个定义的负担。
发布于 2015-10-29 23:29:26
是否可以创建不带模板参数的模板
不是的。你不需要这样的变通方法,因为...
允许在不违反One Definition规则的情况下在头文件中定义类
您可以在头文件中定义类,而不会违反One Definition Rule。
您甚至可以在header中定义类的成员函数--我认为这就是这个问题的重点。只需将它们全部声明为inline。如果在类定义中定义成员函数,则它们是隐式内联的。
程序中可能存在内联函数的多个定义,只要每个定义出现在不同的翻译单元中。例如,一个内联函数可能定义在多个源文件中的#include'd头文件中。
https://stackoverflow.com/questions/33418214
复制相似问题