是否可以在仅使用一个文件的情况下单独编译 c++ 中的 class 代码(如 .h 和 .cpp)?

Is it possible to separately compile class code in c++ (like .h and .cpp) while only using one file?

我正在尝试获得没有两个文件的拆分的好处。拆分编译不拆分存储。

我理解将 .h 和 .cpp 文件分开的好处,但我真的不喜欢将文件分开,特别是当 类 很小并且每个文件都可以放在同一页上时。

是否有预编译器选项,或者是否有任何其他技巧可以让我保持分离的好处,同时将文本全部放在同一个地方?例如:

编辑:请不要过分关注这个例子。这是为了炫耀一个虚构的预处理器 arg #CPP_SPLIT。实际代码不重要,请忽略。

// TinyClass.h
class TinyClass {
  TinyClass();
  int answerToLife();
}

// the following is a fake compiler arg
// in this example it would be totally unnecessary, 
// but many of my classes have some form of circular referencing
// and can not include all the code in the .h file
#CPP_SPLIT

TinyClass::TinyClass() {}
TinyClass::answerToLife() { return 42; }

#CPP_SPLIT_END

您可以像这样将实现直接放在 header 中:

// TinyClass.h
class TinyClass {
  TinyClass() {}
  int answerToLife() { return 42; }
};

此外 inline 可能有助于完成您想要的事情:

// TinyClass.h
class TinyClass {
  TinyClass();
  int answerToLife();
}

inline TinyClass::TinyClass() {}
inline int TinyClass::answerToLife() { return 42; }

我不确定这样做是否值得,但您可以将 .cpp 文件的内容放入 #ifdef 部分,如下所示:

#ifdef PART_ONE

[...]

#endif

#ifdef PART_TWO

[...]

#endif

#ifdef PART_THREE

[...]

#endif

...然后多次重新编译文件,如下所示:

g++ -DPART_ONE   -opart1.o myfile.cpp
g++ -DPART_TWO   -opart2.o myfile.cpp
g++ -DPART_THREE -opart3.o myfile.cpp
g++ -o a.out part1.o part2.o part3.o

另一个可能的解决方案似乎是提议的 c++ 模块标准。如果你碰巧跨越了这么多年,请看那里。