将函数限制为命名空间

时间:2017-11-10 21:47:47

标签: c++ class namespaces

我正在构建某种神经网络库。由于我以前从未建过任何图书馆,所以我对这个风格有一些疑问 在我的项目中,例如有以下类:

NeuralNetwork, Layer, Util

所有在一个命名空间中。现在,LayerUtil需要有一些公共函数,因为它们将在NeuralNetwork中调用。但是,NeuralNetwork是唯一一个应该可以访问世界其他地方的课程。 (顺便说一句,创建单个Layer对象没有任何意义)。

那么有什么方法我只能在该命名空间中的其他类中使用这些函数?还是有更优雅的方法?我想扩展这个类并只创建私有函数但是这没有任何意义,并且会使代码变得更加丑陋,因为主类不是从其他类派生出来的,而是使用它们。

1 个答案:

答案 0 :(得分:0)

听起来你正在寻找匿名命名空间。我承认,有点奇怪的名字。

基本上,在以下代码中,foo 可用于.cpp文件的其余部分:

namespace {
  class Foo { public: Foo(int) {} } ; 
}

在幕后,编译器将创建一个唯一的名称,不能与任何其他名称空间冲突 - 甚至不是其他库的匿名名称空间!你不在乎这个隐藏的名字。在.cpp文件中,您可以直接使用Foo