Как набрать указатель на шаблон функции? - PullRequest
0 голосов
/ 28 октября 2018

Я хочу ввести указатель на функцию , который указывает на функцию шаблона.

class A
{
    template <typename T>
    typedef void (*FPTR)<T>();
}

Я пробовал таким образом, но безуспешно.Есть идеи об этой вещи?

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Как указывало @HolyBlackCat, указатель на нормальную функцию должен работать, поскольку у вас есть простая шаблонная функция void, параметр шаблона которой не действует как для типов возврата, так и для типов аргументов.

template <typename T>
void someVoidFunction() {}

using fPtrType = void(*)();

int main()
{
    fPtrType funPtr1 = &someVoidFunction<int>;
    fPtrType funPtr2 = &someVoidFunction<float>;
    fPtrType funPtr3 = &someVoidFunction<std::string>;
    return 0;
}

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

template <typename T, typename U>
T someFunction(U u) {}

template <typename T, typename U>
using fPtrType = T(*)(U);

int main()
{
    fPtrType<int, float> funPtr1 = &someFunction<int, float>;  // instance 1
    fPtrType<float, float> funPtr2 = &someFunction<float, float>; // instance 2
    return 0;
}
0 голосов
/ 28 октября 2018

Шаблонные функции производят функции.Шаблонные классы создают классы.Переменные шаблона создают переменные.

Указатели могут указывать на функции или переменные.Они не могут указывать на шаблоны;шаблоны не имеют адреса.

Typedef определяет тип переменной.

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

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