跨类辅助函数的最佳约定

时间:2013-07-15 16:48:26

标签: c++

假设我有两个类,A类和B类,都在名称空间NAMESPACE中定义。这两个类都使用辅助函数helper()。由于这两个类都使用了这个函数,我认为可以在同一命名空间中的.h文件中定义helper()但在两个类之外。但是,该功能对于使用我的代码的人来说是可见的和可用的。我的理解是,这违反了惯例,而且这个函数应该是某种机制的私有,因为我从不希望显式调用这个函数。但是,要将其声明为private将要求我在两个类中声明它,因此稍后在.cpp文件中定义它两次。创建一个可由两个类使用但对用户不可见的函数的最佳方法是什么?

3 个答案:

答案 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)

如何使用声明为静态私有函数的辅助函数创建单独的类。在类声明中,您还声明了将这些辅助函数用作友元类的类。这样,函数对于需要它们的类是可见的,而不是其他人。