9

Google C++ コーディング スタイル ガイドでこの項目に注目しましたが、よくわかりません。

他のファイルに含まれるヘッダー以外のファイルにインライン メソッドまたは関数を配置すると、クラスのメソッドにはなりません。それを含むコードのビットにのみ使用できます。では、なぜそのような -inl.h ファイルがあるのでしょうか?

また、長い関数をインライン化したいのはなぜでしょうか? (つまり、テンプレートの場合を除き、インスタンス化のためにヘッダー ファイルにコードを配置する必要がある場合)

4

3 に答える 3

11

Google C++ コーディング スタイル ガイドでこの項目に注目しましたが、よくわかりません。

塩のピンチでそのガイドを取ってください。ガイドラインの多くは、Google の従来のコードベースとのやり取りを支援することを目的としており、一般的な C++ 開発には特に適切なアドバイスではありません。

では、なぜそのような-inl.hファイルがあるのでしょうか。

特に正当な理由はありません。私は自分でそれをしません。ヘッダーのユーザーが一般的に読みたいメインヘッダーファイルの内容の量を最小限に抑え、一般的に気にしない実装の詳細を分離するため、一部の人々はそれらを気に入っています。

また、長い関数をインライン化したいのはなぜでしょうか?

テンプレート定義は、テンプレートをインスタンス化する翻訳単位で利用可能でなければならないため、(通常は) ヘッダーにある必要があります。

場合によっては、関数をヘッダーにインラインで実装することで、別の翻訳単位を作成してリンクすることを心配する必要がなくなります。これにより、ライブラリの配布がより便利になります。ビルド時間が長くなる可能性があります。

于 2013-07-17T11:22:41.900 に答える
9

これは、長い関数テンプレートに対してよく行われます。通常のヘッダーmy_functions.hには宣言のみが含まれ、実装ファイルmy_functions-inl.hには実装が含まれます。その理由は、関数テンプレートを .cppファイルに入れることができないためです。Xh ファイルには X-inl.h ファイルが含まれており、その逆ではないことに注意してください。

他のライブラリには異なる命名規則があります。たとえば、一部の Boost ライブラリは、テンプレート ヘッダーに .hpp を使用し、テンプレート実装ファイルに .ipp を使用します。

于 2013-07-17T11:21:23.310 に答える