如何使用typedef模板函数指针?

时间:2018-10-28 10:46:11

标签: c++ c++11 templates function-pointers typedef

我想输入一个指向模板函数的函数指针

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

我已经尝试过这种方法,但没有成功。对这件事有想法吗?

2 个答案:

答案 0 :(得分:3)

正如@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;
}

答案 1 :(得分:2)

模板函数产生函数。模板类产生类。模板变量会产生变量。

指针可以指向函数或变量。他们不能指向模板。模板没有地址。

Typedef定义变量的类型。

模板变量指针可以共同指向模板函数的各种实例,但是初始绑定将在编译时完成,并且一次只能指向其他变量。