我知道模板定义及其实现可以并且必须放在一起,但是(非模板)类怎么样?
就个人而言,我更喜欢把类和它的实现放在一起,如果可能的话,因为它使用起来比较简单,你只需要在项目中包含头文件,不需要打扰实现文件.
它可以完成,但是每次更改实现时都会强制类的所有用户重新编译,重新编译也会变慢.为此,您需要函数定义inline
.
// in header
struct T {
void f() { std::cout << "f()\n"; }
void g();
};
inline void T::g() {
std::cout << "g()\n";
}
Run Code Online (Sandbox Code Playgroud)
现在问题出现了,如果你的类有静态成员变量,因为那些需要在一个翻译单元中定义.为此,您仍需要提供.cpp.
无论如何,我建议不要采用这种方法.当在罗马时,像罗马人那样做,而在C和C++中意味着单独编译和分割标题和实现文件.