У меня нет привычки читать стандарт, но язык программирования Страуструпа C ++ очень полезен.
A.9 Шаблоны: дает грамматику для объявления шаблона;параметр-типа - это класс, имя типа или другой шаблон, поэтому тип известен как статический.(Это не динамично. Можно представить объект typeinfo, если бы C ++ был динамическим языком. Но это был не ваш вопрос.)
C.13.8.3 Привязка точки инстанции: говорит, что точка инстанцированиядля шаблона непосредственно перед объявлением, используя его.
Приведенный пример касается разрешения имен в определении шаблона в правильную область.Это было бы очень сложно сделать во время выполнения!
например, из Stroustrup C.13.8.3:
template<class T> void f(T a) { g(a); }
void g(int);
void h()
{
extern g(double);
f(2);
}
"Здесь точка создания экземпляра для f находится непосредственно перед h (), так что g (), вызываемая в f (), является глобальным g (int), а не локальным g (double). "
Я думаю, это не исключает JIT, но на практикесоздание шаблона f требует знания правильного разрешения g в определенной строке.Как говорит Джонатан, вам понадобятся сервисы компилятора как часть времени выполнения, а также полный контекст, созданный в компиляторе при компиляции этого модуля.Если это не работа во время компиляции, я не знаю, что это такое.
РЕДАКТИРОВАТЬ: Все это опирается на античную версию стандарта C ++.