Нет, это невозможно. Подъязыком шаблона является функциональный , т. Е. Нет состояния: шаблон полностью определяется своими аргументами.
Но если макрос может подойти, используйте __COUNTER__
. В объеме единицы перевода (конечно) она расширяется до нового уникального значения при каждом ее использовании. Так, например, в следующем коде шаблон fn
создается для трех различных значений n
:
#define MY_FN (fn<__COUNTER__>)
template <int n>
void fn();
int main() {
MY_FN();
MY_FN();
MY_FN();
}
Вы даже можете использовать __COUNTER__
для генерации уникальных имен переменных с использованием вставки токена, если это необходимо поэтому.