在哪里放置2个文件的辅助函数?

时间:2016-05-14 04:41:05

标签: c++

我有4个文件:f.h,f.cpp,g.h,g.cpp。 f.h和f.cpp都包含g.h,但f.cpp和g.cpp有一个共同的辅助函数(注意f.h不需要它,但它需要g中的定义)。 目前,我将帮助函数作为g.h中的自由站(因此g.cpp和f.cpp都包含它)。但是,这让我感到害怕,因为: 1.包括f.h可以自由使用它(意思是封装) 2.如果他有一个与自由函数同名的函数,它就不会编译

我真的希望找到一个没有代码重复的解决方案(它不是一个很大的辅助功能,只需几行。它的原理是:P)。

3 个答案:

答案 0 :(得分:2)

创建g_f_private.h。在其中添加仅由f.cppg.cpp使用的所有帮助程序类/函数/声明。

#ncludef.cpp

g.cpp

请勿将其公开给f.hg.h的用户。

答案 1 :(得分:1)

您有几个选择

你描述的内容(只有少数.cpp需要它而没有其他人应该使用它)听起来像我称之为“内部”功能。

  • 为此功能创建一个新的.h文件,其他类似的文件名为internal.hdetail.himpl.h或其他敏感内容。

  • 将函数放在f.h(或者甚至是上面的新文件)中,并使用命名空间来区分普通用户不应使用的代码。

    namespace internal { // or "detail" or whatever
        // function here
    }
    

    这是许多人和开源项目所做的事情。

  • 如果你真的真的不想要任何其他东西来使用这个功能,你可以把它作为一个类的私有静态成员,只与你的朋友交朋友。

    class PrivateFunctions {
    private:
        // static your function
        // friend your classes
    };
    

    我建议反对这种方法,因为它不常见,难以改变,而且详细

答案 2 :(得分:0)

如果您需要更多访问控制权限,可以将其设为friend功能。

另一种选择是为辅助函数创建一个新文件,并在需要的地方包含它。对于一个功能,我不会这样做。取决于你未来的计划。