私のコードにはたくさんのテンプレートがあります。C++で頻繁にインスタンス化されたテンプレートを見つけるには?
どのようにしてテンプレートがコードを膨らませているのですか(何度もインスタンス化することによって)
私のコードにはたくさんのテンプレートがあります。C++で頻繁にインスタンス化されたテンプレートを見つけるには?
どのようにしてテンプレートがコードを膨らませているのですか(何度もインスタンス化することによって)
質問とそのコメントの簡単な注記:テンプレートのインスタンス化の数は重要ではなく、タイプの組み合わせが異なるインスタンシエーションの数だけです。これはテンプレートの特殊化とは非常に異なります。
インスタンシエーションを手動で実行するのは簡単で汚い方法です。確認したいテンプレートについては、警告を生成する行を追加するだけです。それは完全にあなたのコンパイラの種類とプロジェクトのコンパイラオプションに依存するため、ここでそのようなステートメントを与えることは難しいです。一意の名前と疑わしい値を持つ静的変数を追加することをお勧めします。これらのカスタム警告のコンパイラログをフィルタリングするだけです。すべての異なるタイプの組み合わせは1回だけコンパイルされるため、それぞれの組み合わせに対して1つの警告が必要です。そうでない場合は、ログから重複をフィルタリングするのは簡単です。
残念ながら、このようなカスタムステートメントを使用してすべてのテンプレートに印を付けることは、邪魔になり、非常に時間がかかることがあります。より洗練されたものが必要な場合は、テンプレートメタプログラムデバッガを試すことができます。ここ(ブーストメーリングリスト)には、無料のデバッガのダウンロードページへの短い要約とリンクがあります。
http://boost.2283326.n4.nabble.com/Re-vsix-template-profiler-extension-Templight-td3888368.html
あなたはそれがどのように動作するか好奇心旺盛であれば、あなたはhttp://gsd.web.elte.hu/contents/articles/gpce06.pdfでそれについての詳細を読むことができます。
+1これは素晴らしいようです! – Mehrdad
あなたは特別な意味ですか? –
@LuchianGrigore:Specialized?私はインスタンス化されたことを意味します... – Mehrdad
最初のスペシャライゼーション後に、後続のコードが膨らんだことはありません。 –