1

ahファイルに次のテンプレート関数があるとします。

#include <iostream>

template <class T>
void foo(T arg)
{
   ...some code...
   std::cout<< arg <<std::endl;
}

そしてa.cppの次のコード

#include "Header.h"
#include <string>
int main(int argc, char* argv[])
{
    foo<int>(5);
    foo<double>(5.25);
    foo<std::string>("Hello World");
    return 0;
}

この実行可能ファイルのリンカー (VS で /MAP (Generate Mapfile) オプションを設定) によって生成された.mapファイルを調べると、foo 関数のエントリが 1 つだけ表示されます。

0001:000006f0       ??$foo@H@@YAXH@Z           004016f0 f i main.obj

ただし、foo 関数の 3 つの個別のエントリ (インスタンス化ごとに 1 つ) が含まれている必要があると想定していました。Amap でマップ ファイルを表示すると、このエントリが

 void foo<int>(int) 

関数。誰かがエントリがない理由を説明できますか

void foo<std::string>(std::string) 
void foo<double>(double)

機能?

ありがとうございました

4

0 に答える 0