В более общем плане, скомпилирование шаблона не очень много. Microsoft только недавно abandoned something можно грубо назвать реализацию замены текста для шаблонов:
Метод, выбранный для реализации этой [шаблонов, в старом компиляторе] должен был сделать некоторый минимальный парсинг шаблона, а затем захватить всю template как строка токенов (это очень похоже на то, как макросы обрабатываются в компиляторе). Позже, когда экземпляр шаблона создается,, что поток токенов будет воспроизводиться через парсер и аргументы шаблона будут заменены.
Причина, по которой это было заброшено, заключается в том, что недостаточно реализовать шаблоны правильно. Но шаблон в C++ по-прежнему очень важен шаблон в семантическом смысле, поэтому обычный метод компиляции шаблона с использованием кода предполагает наличие источника шаблона.
Это яркий контраст с C#, который компилирует автономные шаблоны в строгом смысле слова (к IL, конечно).
Инстанцирование шаблон делает больше:
#include<iostream>
using namespace std;
// this works;
template<typename T> T f(T t)
{
return cout;
}
// this doesn't
// double d = f(1.0);
Задать компилятор ... – YSC
он компилируется, но я не уверен, если это правильный способ сделать это .. –
только тот, кто может определить, является ли это «правильный способ сделать это» это ты. Потому что только вы могли бы знать, что является правильным поведением для вашего собственного кода. –