函数定义在头文件中,因为函数来自不同的项目

时间:2010-08-10 09:22:54

标签: c++

将一个小函数的定义(由两个项目使用并且最多有10行代码)放入一个Header文件中是否合适?

这是因为我可以将Header文件放入include-Directory中,该目录由两个Projects共享。否则,我必须在每个项目源目录中维护相同的cpp-Files。

这种情况的常见方法是什么?

感谢您的回答。

4 个答案:

答案 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或者另外定义函数..