【发布时间】:2018-04-24 04:53:29
【问题描述】:
我正在构建某种神经网络库。由于我以前从未构建过任何库,因此我对样式有一些疑问。
在我的项目中,例如有以下类:
NeuralNetwork, Layer, Util
全部在一个命名空间中。现在,Layer 和 Util 需要有一些公共函数,因为它们将在 NeuralNetwork 中调用。但是由于NeuralNetwork 是唯一一个应该可供“世界其他地方”访问的类(顺便说一句。创建单个Layer 对象没有任何意义)。
那么有什么方法可以让我只能在该命名空间的其他类中使用这些函数吗?还是有更优雅的方法?我想过扩展类并只制作私有函数,但这没有任何意义,并且会使代码更丑陋,因为主类不是从其他类派生而是利用它们。
【问题讨论】:
-
了解生产质量库的作用的最佳方法是检查它们。
-
我所说的是否是您应该解决的问题?还是你只是忍受它并希望没有人会想到用它做奇怪的事情。
-
@po0l:如果您在
Util.h中定义了Util,并且您在NeuralNetwork.cpp中只使用Util.h而不是NeuralNetwork.h,则不需要将Util.h分发给您的用户。即使您提供了完整的源代码,只将公共标头放在include/中并将实现内部标头保留在src/中的情况并不罕见。 -
你不能阻止人们做他们不应该做的事情。所以俗话说,保护他们免受墨菲,而不是马基雅维利。做到这一点,这样他们就不会意外编写损坏的代码。但不要担心他们可能有任何意图在脚下开枪。举个例子,boost 库将实现细节放入内部
boost::detail命名空间。当然,如果人们有勇气,他们可以访问它。但负责任的成年人不会被那里的任何东西伤害。 -
@po0l:是的,忍受它并希望。但除了希望之外,还要编写清晰的文档,告诉客户只使用那些打算公开的类,并将内部类放入他们自己的命名空间中,并使用描述性名称,如
detail或implementation。
标签: c++ class namespaces