3

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

4

3 回答 3

4

一种常见的方法是将函数放入detail命名空间内的命名空间中。这并不意味着其他人不能故意使用它,但它不会污染您 API 的命名空间。

或者,如果您在同一个源文件中实现这两个类,只需将其放在该源文件中的匿名命名空间中,并且根本不将它放在头文件中。

于 2013-07-15T16:50:54.700 回答
1
struct CommonImpl {
protected:
  static void foo() { }
};

struct A : CommonImpl {
  void bar() { CommonImpl::foo(); }
};

struct B : CommonImpl {
  void bar() { CommonImpl::foo(); }
};
于 2013-07-15T17:20:00.183 回答
0

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

于 2013-07-15T17:12:10.470 回答