私はcaffeコードを読んでいて、C++クラスのテンプレートコードをhppとcppファイルに分割しています。たとえば、Net.cppにはテンプレートクラスのNet実装コードが含まれ、Net.hppには定義が含まれています。しかし、テンプレートクラスをhppファイルとcppファイルに分割することは不可能であることを思い出しました.Caffeはどのようにこの作業をしていますか? ありがとうございます。caffeはどのようにテンプレートクラスコードをcppファイルとhppファイルに分割しますか?
答えて
あなたが指摘したように、template definitions cannot be split up as easily from the declarationsいくつかのフープを飛び越えずに。
一般的なパターンの1つは、異なるファイルに分割することです。人の読者の場合しかし、本質的にそれらは依然としてすべて1つのヘッダーに定義されています。例えば
がfoo.h
#pragma once
template <typename T>
void Foo(); // declaration
#include "Foo.inl"
Foo.inl.h
ファイルの最後のものは、実際に.inl
ファイルの完全な内容を含めることであることを
template <typename T>
void Foo()
{
// actual definition
}
お知らせ。コンパイラに関する限り、あなたが言及した最初の問題を解決するために、すべてのテンプレート定義がヘッダーに含まれています。しかし、人間の読者には、宣言と定義が分かれています。
テンプレートの定義と減速を「通常」分けることはできません。コンパイラがテンプレートをインスタンス化するとき、コンテキストで使用されているメンバーの定義と宣言を正確に知る必要があります。ヘッダーファイルのみをインクルードすると、コンパイラーはテンプレートパラメーターのテンプレートをインスタンス化する方法を知りません。
coryKramerが記述した以外の解決策(.cppファイル内)は、必要なテンプレートパラメータのテンプレートを明示的にインスタンス化したものです。この方法で、テンプレートは既に使用するのが好きです(この時点で、テンプレートの完全な宣言と定義があります)。ただし、テンプレートがそのファイルに完全に定義されていない場合、このプロセスを実行する方法をコンパイラが知らないため、テンプレートに他の値をインスタンス化する必要がある場合、エラーが発生することがあります。
これは、.cppファイルの最後にINSTANTIATE_CLASS(ネット)マクロを使用してcaffeで使用される方法です。
ありがとう、私はちょうどコードを見て、あなたは正しいです。 caffeは、caffe/util/math_functions.cppやmath_functions.hppの関数などの関数テンプレートをどのように扱いますか? – XiongJi
- 1. C++のクラスをhppとcppファイルに分割する方法
- 2. HPPファイルとCPPファイルのC++モードを自動的にロード
- 3. ライブラリにhppファイルとcppファイルがリンカーエラーで追加されました
- 4. クラスコードをヘッダーとcppファイルに分割する
- 5. テンプレート定義とインスタンス化をhppファイルとippファイルに分割するにはどうすればいいですか
- 6. Boostのlibにhppファイルがないようですか?
- 7. cppcheckは.hppファイルをスキップします
- 8. ファイルを複数の部分に分割してサーバーに送信すると、そのファイルをどのように扱うことができますか?
- 9. プロジェクトを.hと.cppに分割する
- 10. 私はどのように私のvuexファイルを分割するのですか?
- 11. 1つのjsファイルを複数のjsファイルに分割するにはどうすればよいですか?
- 12. .hpp内に署名を持つ.cppファイル内にインライン関数を定義するにはどうすればよいですか?
- 13. Jquery.jsファイルを複数のファイルに分割するにはどうすればよいですか?
- 14. Pythonでキーワードを含むファイルにファイルを分割しますか?
- 15. メインページを離れずにHTMLファイルを分割しようとしています
- 16. spaCyトークナイザはどのように文を分割しますか?
- 17. 元のファイルに分割して元に戻したリストをどのように戻しますか?
- 18. 分割dmpファイルを複数のdmpファイルに分割する
- 19. C++モジュールを使用する場合、関数宣言(.hppファイル)をその定義(.cppファイル)から分離する何らかの理由がありますか?
- 20. カント私は2つの異なるファイルにHTMLファイルを分割しようとしているスプリットhtmlファイル
- 21. Intellisenseは.cppとして.cppファイルを扱います
- 22. ちょうどcppファイルに含まれていること
- 23. Api pdfbox-app-2.0.2どのように私はPDFファイルを分割することができますか?
- 24. foreachがファイルを分割しないようにする
- 25. ファイルから分割し、私は、ファイルから行を分割しようとすると、その後のpythonの辞書に分割文字列を追加しようとしています辞書
- 26. caffeの.netファイルとは何ですか?
- 27. marklogic mlcpカスタム変換分割ファイルを複数のファイルに分割
- 28. CSVファイルを正確に1GBのファイルに分割するか、それほど少ないファイルに分割しますか?
- 29. ファイルをHDFS内の小さなファイルに分割します
- 30. どのようにC言語のソースコードを別々のファイルに分割しますか?
関連:https://stackoverflow.com/questions/115703/storing-c-template-function-definitions-in-a-cpp-file – NathanOliver