2017-11-10 11 views
1

私はある種のニューラルネットワークライブラリを構築しています。前にライブラリを作ったことがないので、スタイルに関するいくつかの質問があります。私のプロジェクトで
は、たとえば次のクラスのためにあります。関数を名前空間に限定する

NeuralNetwork, Layer, Util 

すべての名前空間1に。今、LayerUtilは、NeuralNetworkで呼び出されるため、いくつかのパブリック関数を持つ必要があります。しかし、NeuralNetworkが「世界の残りの部分」のためにアクセス可能でなければならない唯一のクラスです(そして、btw。単一のLayerオブジェクトを作成するのは意味がありません)。

私はその名前空間内の他のクラスでこれらの関数を使用することができるいくつかの方法がありますか?それとももっと洗練されたアプローチがありますか?私はクラスを拡張し、私的な関数だけを作ることを考えましたが、それは意味をなさないでしょうし、メインクラスが他のクラスから派生するのではなくむしろそれらを使用するので、コードを醜いものにするでしょう。

+1

生産品質ライブラリが何をするかを知る最も良い方法は、それらを調べることです。 – StoryTeller

+0

私はあなたが取り組むべき問題さえも話していますか?それとも、あなたはそれで暮らしていて、誰もそれで奇妙なことをすることを考えないことを願っています。 – po0l

+2

@ po0l: 'Util.h'で' Util'を定義し、 'NeuralNetwork.h'ではなく' NeuralNetwork.cpp'で 'Util.h'だけを使うと、' Util.h'を配布する必要はありません'あなたのユーザーに。そして、あなたがソース全体を提供しても、 'include /'にパブリックヘッダを入れ、 'src /'に内部ヘッダを実装するのは珍しいことではありません。 – MSalters

答えて

0

匿名の名前空間を探しているようです。少し奇妙な名前、私は認めます。

基本的には、次のコードでは、fooは、.cppファイルの残りの部分にのみ提供されています:舞台裏

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

、コンパイラは、と衝突することができない何かを一意の名前を作成します。他の名前空間 - 他のライブラリの匿名の名前空間さえありません!その隠された名前は気にしません。 .cppファイルでは、Fooを直接使用することができます。

+0

とライブラリ全体が1つの.cppファイルに含まれている必要がありますか? –

+1

@KjellGunnar:いいえ、ただし、ライブラリ内の各.cppファイルには、独自の匿名名前空間があります。 – MSalters

関連する問題