Как генерировать новый тип шаблона при каждом вызове функции? - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь выяснить, возможно ли автоматически генерировать шаблонный тип функции в зависимости от количества вызовов этой функции?

template<class T>
class A {
// some logic here
};

// smth is auto genearted type from may be count of calls f()?
template<class T = smth>
int f(int var) {
    return A<T>::patch(a);
}

int main() {
    int var = 0;

    // each function call without explicit template type generates unique type T
    var = f(var); 
    var = f(var);
    var = f(var);

    return 0;
}

1 Ответ

0 голосов
/ 14 апреля 2020

Нет, это невозможно. Подъязыком шаблона является функциональный , т. Е. Нет состояния: шаблон полностью определяется своими аргументами.

Но если макрос может подойти, используйте __COUNTER__. В объеме единицы перевода (конечно) она расширяется до нового уникального значения при каждом ее использовании. Так, например, в следующем коде шаблон fn создается для трех различных значений n:

#define MY_FN (fn<__COUNTER__>)

template <int n>
void fn();

int main() {
    MY_FN();
    MY_FN();
    MY_FN();
}

Вы даже можете использовать __COUNTER__ для генерации уникальных имен переменных с использованием вставки токена, если это необходимо поэтому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...