2016-05-14 11 views
1

私は4つのファイルを持っています:f.h、f.cpp、g.h、g.cpp。 f.hとf.cppの両方にはg.hが含まれていますが、f.cppとg.cppには共通のヘルパー関数があります(注f.hには必要ありませんが、gの定義が必要です)。 現時点では、g.hにフリースタンディングのヘルパー機能があります(g.cppとf.cppの両方に含めるように)。 1.WhoeverはFHが、彼はフリー機能と同じ名前を持つ関数を持っている2.Ifは (カプセル化を意味する)、自由にそれを使用することができます含まれ、それは2つのファイルのヘルパー関数を配置する場所は?

私はコンパイルされません。しかし、これは私をおびえさせます実際にコードの重複がないソリューションを望んでいます(これは大きなヘルパー機能ではなく、ほんの数行です)。

+0

は、なぜあなたは#1の怖がっていますか?他の誰かがそれを誤って使用することを心配していますか? – vu1p3n0x

+0

私は怖いかどうか分かりません。私は、できるだけ多くのカプセル化を提供するように教えられました。私は一貫していることを望んでいました。 –

答えて

2

g_f_private.hを作成します。 f.cppg.cppによってのみ使用されるすべてのヘルパークラス/関数/宣言をそれに追加します。

#ncludef.cppおよびg.cppである。

f.hg.hのユーザーに公開しないでください。

+0

それはいいアイデアです、ありがとう。 –

+0

あなたは大歓迎です。私は喜んで助けてくれました。 –

0

さらにアクセス制御が必要な場合は、friendの機能にすることができます。

もう1つのオプションは、ヘルパー関数の新しいファイルを作成し、必要な場所に含めることです。ただ一つの機能のために私はそれをしません。あなたの将来の計画に依存します。

+0

ありがとう、彼らはクラス以上のものを含んでいますが、友人の機能は私に合わないかもしれません。なぜあなたは1つの機能のためにそれをしませんか? –

+0

私はそれが厄介になることができるので、それをしないだろう。それは間違いなく良い選択肢になります。また、各クラスのメソッドを複製したり、各ファイルの静的関数として宣言したりすることもできます。繰り返しますが、実際にはコード(構造)に依存し、味の問題かもしれません。 – holzkohlengrill

1

あなたは(.cppほんの数秒がそれを必要とし、誰もそれを使用するべきではありません)あなたが記述何いくつかのオプション

を持っているが、私は「内部」関数を呼び出すと思いますwhat'dのように聞こえます。

  • それはinternal.hまたはdetail.hまたはimpl.hまたは無意味なものと呼ばれるように、この機能や他の人のための新しい.hファイルを作成します。

  • f.h(または上記のような新しいファイル)に関数を置き、名前空間を使用して通常のユーザーが使用しないコードを区切ります。

    namespace internal { // or "detail" or whatever 
        // function here 
    } 
    

    これは多くの人とオープンソースプロジェクトが行うことです。

  • 本当に本当にこの機能を使用したくない場合は、それをクラスのプライベートな静的メンバーとしてスティックし、自分のクラスだけを友人にすることができます。

    class PrivateFunctions { 
    private: 
        // static your function 
        // friend your classes 
    }; 
    

    それは変更することが、珍しく難しいので、私もこの方法に対して助言するだろう、と冗長

+0

答えがありがとう、私は後者よりも最初のアイデアが好きですが、R Sahuは両方を捕まえるような解決策を提供しました。なぜそれを受け入れたのですか、人々はなぜR sahuが提案したものではない内部名前空間を使用しますか? –

+0

私はオープンプロジェクトの明白な理由は、人々がヘルパー機能を使用でき、それ以上のことがあるかどうか疑問に思うということです。 –

+1

名前空間に内部関数を貼り付けるのは、特別なファイルというよりも、どこに、なぜ、どのファイルが含まれているのかを後で覚えなければならない場合があります。簡単に作業できます。また、人々が実際にあなたの機能を使いたいと思っていて、ソースを持っていれば、とにかくそれを使うつもりです。 – vu1p3n0x

関連する問題