我正尝试获得不使用两个文件进行拆分的好处。在不拆分存储的情况下拆分编译。
我了解分离.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
答案 0 :(得分:1)
我不确定是否值得为此付出努力,但是您可以将.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
答案 1 :(得分:0)
您可以像下面这样直接将实现直接放在标头中:
// 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; }
答案 2 :(得分:0)
另一种可能的解决方案似乎是提议的c ++模块标准。如果您沿线走过这么多年,请看看那里。