限制函数名称空间

限制函数名称空间

问题描述:

我正在构建某种神经网络库。由于我以前从未建立过任何图书馆,因此我对这种风格有一些疑问。
在我的项目有,例如以下类别:限制函数名称空间

NeuralNetwork, Layer, Util 

都在同一个命名空间。现在,LayerUtil需要有一些公共职能,因为他们将在NeuralNetwork中被调用。但是因为NeuralNetwork是唯一可以访问“世界其他地方”的类(并且顺便说一句,创建一个单一的Layer对象没有任何意义)。

那么有什么办法可以在那个名字空间的其他类中使用这些函数吗?还是有更优雅的方法?我想扩展这个类,只做私有函数,但这没有任何意义,并且会使代码更丑,因为主类不是从其他类派生出来的,而是利用它们。

+1

了解生产质量图书馆做什么的最好方法是检查它们。 – StoryTeller

+0

即使是你应该解决的问题,我也在谈论什么?或者你只是和它一起生活,并希望没有人会考虑用它做出奇怪的事情。 – po0l

+2

@ po0l:如果你在'Util.h'中定义'Util',并且你只在'NeuralNetwork.cpp'中使用'Util.h',而不是'NeuralNetwork.h',你不需要分发'Util.h '给你的用户。即使你提供了整个源代码,只将公共头文件放入'include /'并将实现内部头文件保存在'src /'中也是很常见的。 – MSalters

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

基本上,在下面的代码,foo提供给.cpp文件的其余部分:

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

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

+0

并且整个库必须位于一个.cpp文件中? –

+1

@KjellGunnar:不,但请注意库中的每个.cpp文件都有其自己的匿名命名空间。 – MSalters