如何typedef模板函数指针?
How to typedef template function pointer?
我想键入一个指向模板函数的函数指针。
class A
{
template <typename T>
typedef void (*FPTR)<T>();
}
我试过这种方法,没有成功。对这件事有什么想法吗?
模板函数产生函数。模板 类 生成 类。模板变量产生变量。
指针可以指向函数或变量。他们不能指向模板;模板没有地址。
Typedef 定义变量的类型。
模板变量指针可以共同指向模板函数的多个实例,但初始绑定将在编译时完成,并且一次只能指向其他地方的一个变量。
正如@HolyBlackCat 指出的那样,正常的函数指针应该可以工作,因为您有一个简单的模板化 void 函数,其模板参数不会同时作用于 return 和参数类型。
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 和 return 类型,您应该为每种类型实例化函数指针。
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;
}
我想键入一个指向模板函数的函数指针。
class A
{
template <typename T>
typedef void (*FPTR)<T>();
}
我试过这种方法,没有成功。对这件事有什么想法吗?
模板函数产生函数。模板 类 生成 类。模板变量产生变量。
指针可以指向函数或变量。他们不能指向模板;模板没有地址。
Typedef 定义变量的类型。
模板变量指针可以共同指向模板函数的多个实例,但初始绑定将在编译时完成,并且一次只能指向其他地方的一个变量。
正如@HolyBlackCat 指出的那样,正常的函数指针应该可以工作,因为您有一个简单的模板化 void 函数,其模板参数不会同时作用于 return 和参数类型。
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 和 return 类型,您应该为每种类型实例化函数指针。
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;
}