C++ で関数テンプレートまたはクラス テンプレートのコンパイラーによってインスタンス化されたコードを確認する方法はありますか?
次のようなコードがあるとします。
template <class T> T add(T a, T b) {
return a + b;
}
電話すると:
add<int>(10, 2);
... テンプレートの特殊化のためにコンパイラが作成する関数を確認したいと思いますint
。
私は g++、VC++ を使用しており、これを実現するにはコンパイラ オプションを知る必要があります。
ベストアンサー1
カラン(https://clang.llvm.org/) はインスタンス化されたテンプレートの AST をきれいに印刷できます。
たとえば:
テスト.cpp
template < class T> T add(T a, T b){
return a+b;
}
void tmp() {
add<int>(10,2);
}
AST をきれいに印刷するコマンド:
$ clang++ -Xclang -ast-print -fsyntax-only test.cpp
Clang-5.0/Clang 14.0 出力:
template <class T> T add(T a, T b) {
return a + b;
}
template<> int add<int>(int a, int b) {
return a + b;
}
void tmp() {
add<int>(10, 2);
}