是否可以在仅使用一个文件的情况下单独编译 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++ 模块标准。如果你碰巧跨越了这么多年,请看那里。
我正在尝试获得没有两个文件的拆分的好处。拆分编译不拆分存储。
我理解将 .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++ 模块标准。如果你碰巧跨越了这么多年,请看那里。