C++コンパイラによってインスタンス化されたテンプレートを見ることはできますか? 質問する

C++コンパイラによってインスタンス化されたテンプレートを見ることはできますか? 質問する

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);
}

おすすめ記事