将一个小函数的定义(由两个项目使用并且最多有10行代码)放入一个Header文件中是否合适?
这是因为我可以将Header文件放入include-Directory中,该目录由两个Projects共享。否则,我必须在每个项目源目录中维护相同的cpp-Files。
这种情况的常见方法是什么?
感谢您的回答。
答案 0 :(得分:3)
您可以将其放在标题中,但您需要将其定义为内联:
inline void f() {
// stuff
}
如果标题包含在相同项目中的两个不同的翻译单元中,这将防止出现多重定义错误。请注意,这并不意味着编译器必须在调用站点内联函数代码。
或者,您可以在无名空间中定义它,这将使其包含在您包含的翻译单元的本地:
namespace {
void f() {
// stuff
}
}
答案 1 :(得分:1)
我的一般规则是只将getter / setter放入标题中。
任何比几行更复杂的东西都应该放在源文件(.cpp)中。
答案 2 :(得分:1)
这是一个非C ++解决方案。如果您使用的源代码控件具有对软链接的支持,则可以在一个项目目录中创建源文件,并在其他项目中创建软链接。因此,您在原始源文件中修改的任何代码都会自动反映在其他项目中。
答案 3 :(得分:0)
为什么你不能在每个项目中单独定义相同的功能?或包含cpp文件有什么问题?
也许你说,“它可能会在平均时间内发生变化,我需要更新的”。
但是,假设您在头文件中添加了更多功能,之后您将在头文件中结束整个实现。
您也可以包含源文件,或者在另一个项目中另外定义10行。
如果您希望(请求)您的函数为inline
,请在头文件中声明它。或者,如果您使用templates
,则所有定义都将出现在头文件中。
但在你的情况下,我更喜欢也包括cpp或者另外定义函数..