Давайте предположим, что у меня есть следующая функция шаблона в хиджры файл
#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;
}
Когда я смотрю в .карта файл, сгенерированный компоновщиком (опция / MAP (Generate Mapfile) в VS) для этого исполняемого файла, я вижу только одну запись для функции foo, которая
0001:000006f0 ??$foo@H@@YAXH@Z 004016f0 f i main.obj
Однако я предположил, что он должен содержать 3 отдельные записи для функции foo (по одной на экземпляр). Просмотр файла карты с помощью Amap показывает, что эта запись соответствует
void foo<int>(int)
функция. Может кто-нибудь объяснить, почему нет записей для
void foo<std::string>(std::string)
void foo<double>(double)
функции?
Спасибо
Задача ещё не решена.
Других решений пока нет …