假设我有两个类,A类和B类,都在名称空间NAMESPACE中定义。这两个类都使用辅助函数helper()。由于这两个类都使用了这个函数,我认为可以在同一命名空间中的.h文件中定义helper()但在两个类之外。但是,该功能对于使用我的代码的人来说是可见的和可用的。我的理解是,这违反了惯例,而且这个函数应该是某种机制的私有,因为我从不希望显式调用这个函数。但是,要将其声明为private将要求我在两个类中声明它,因此稍后在.cpp文件中定义它两次。创建一个可由两个类使用但对用户不可见的函数的最佳方法是什么?
答案 0 :(得分:4)
一种常见的方法是将函数放入命名空间中的detail
命名空间。这并不意味着其他人不能故意使用它,但它不会污染您的API命名空间。
或者,如果您在同一个源文件中实现这两个类,只需将它放在该源文件中的匿名命名空间中,并且根本不在标题中。
答案 1 :(得分:1)
struct CommonImpl {
protected:
static void foo() { }
};
struct A : CommonImpl {
void bar() { CommonImpl::foo(); }
};
struct B : CommonImpl {
void bar() { CommonImpl::foo(); }
};
答案 2 :(得分:0)
如何使用声明为静态私有函数的辅助函数创建单独的类。在类声明中,您还声明了将这些辅助函数用作友元类的类。这样,函数对于需要它们的类是可见的,而不是其他人。