我有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)。
答案 0 :(得分:2)
创建g_f_private.h
。在其中添加仅由f.cpp
和g.cpp
使用的所有帮助程序类/函数/声明。
#nclude
和f.cpp
中 g.cpp
。
请勿将其公开给f.h
和g.h
的用户。
答案 1 :(得分:1)
您有几个选择
你描述的内容(只有少数.cpp
需要它而没有其他人应该使用它)听起来像我称之为“内部”功能。
为此功能创建一个新的.h
文件,其他类似的文件名为internal.h
或detail.h
或impl.h
或其他敏感内容。
将函数放在f.h
(或者甚至是上面的新文件)中,并使用命名空间来区分普通用户不应使用的代码。
namespace internal { // or "detail" or whatever
// function here
}
这是许多人和开源项目所做的事情。
如果你真的真的不想要任何其他东西来使用这个功能,你可以把它作为一个类的私有静态成员,只与你的朋友交朋友。
class PrivateFunctions {
private:
// static your function
// friend your classes
};
我建议反对这种方法,因为它不常见,难以改变,而且详细
答案 2 :(得分:0)
如果您需要更多访问控制权限,可以将其设为friend
功能。
另一种选择是为辅助函数创建一个新文件,并在需要的地方包含它。对于一个功能,我不会这样做。取决于你未来的计划。