2016-11-05 7 views
0

C++コンパイラは、テンプレートクラスをインスタンス化するためにメソッドの実装にアクセスする必要があります。したがって、テンプレートの定義をヘッダーファイルに含めるか、ヘッダーファイルで定義するかのどちらかを行う必要があります。しかし、私は、多くの理由から私の関数の実装(定義)をユーザから隠蔽し、関数宣言にしかアクセスできないようにしたいと考えています。 C++でテンプレートを使用している間にそうすることは可能ですか?C++テンプレートクラスメンバ関数の定義を隠す

答えて

3

これは通常、ディレクトリ階層impldetailを作成することによってブーストで行われます。

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?

の行で何かをすることができます
関連する問題