C++コンパイラは、テンプレートクラスをインスタンス化するためにメソッドの実装にアクセスする必要があります。したがって、テンプレートの定義をヘッダーファイルに含めるか、ヘッダーファイルで定義するかのどちらかを行う必要があります。しかし、私は、多くの理由から私の関数の実装(定義)をユーザから隠蔽し、関数宣言にしかアクセスできないようにしたいと考えています。 C++でテンプレートを使用している間にそうすることは可能ですか?C++テンプレートクラスメンバ関数の定義を隠す
0
A
答えて
3
これは通常、ディレクトリ階層impl
とdetail
を作成することによってブーストで行われます。
impl
は、公開されていないAPIメンバ関数の実装を通常持っていますが、あなたが推測しているかもしれないdetail
の内部には公開したくない詳細があります。このシステムは、C++開発者によってかなりよく理解されています。一例として、
:だから
my_service.hpp impl/my_service.hpp impl/my_service.ipp (OR) detail/my_service.ipp
、アイデアは、ヘッダファイルを分割し、内部でのみ他のファイルが含まれます、あなたのトップレベルのヘッダファイルをインクルードするためにユーザーに提供することです。
しかし、誰もがimpl
ヘッダーファイルを直接インクルードするのを止めることはありません。あなたもそれを避けたい場合は、Prevent header from being included in some files, in compilation time?
関連する問題
- 1. テンプレートクラスメンバ関数の特殊化?
- 2. 関数定義C
- 3. C++関数の再定義
- 4. C++、関数定義がメイン
- 5. C++多重定義関数
- 6. C++:関数を定義したときの未定義関数エラー
- 7. テンプレートクラスメンバ関数本体で、クラス定義の外に、テンプレートパラメータはいつ必要ですか?
- 8. C++メンバ関数ポインタの定義
- 9. C++:関数への未定義参照
- 10. Cでユーザ定義の関数とリンクリスト
- 11. C++で定義された関数への未定義参照?
- 12. 目的関数-cで定数を定義する
- 13. C:静的関数を隠すパブリックエイリアス
- 14. C++でMySQLユーザ定義関数
- 15. C標準 - 関数定義は関数プロトタイプですか?
- 16. boost :: thread :: thread(<未解決のオーバーロードされた関数型>、int) - テンプレートクラスメンバ関数
- 17. 関数定義
- 18. 関数定義{}
- 19. 適切なC関数の引数変数の定義場所
- 20. Cで定義されていない関数を定義するには?
- 21. スカラ関数変数:デフォルト値を使用する(関数定義または変数定義で定義する)
- 22. C構造体のgdbプリント関数を定義する
- 23. C++ 11関数型の参照を参照で定義する
- 24. C++クラスコンパイルエラーの関数を定義する(Visual Studio)
- 25. QtCharts(ChartView)のC++関数でqmlオブジェクトを定義する
- 26. ヘッダーファイルの関数を再定義するC++
- 27. C++の関数定義と変数宣言の不一致?
- 28. ユーザー定義関数
- 29. 定義関数は、
- 30. ユーザ定義関数