我在“C”类
中有以下功能class C
{
template<typename T> void Func1(int x);
template<typename T> void Func2(int x);
};
template<typename T> void C::Func1(int x)
{
T a(x);
}
template<typename T> void C::Func2(int x)
{
T a(x);
}
这些函数仅在实现中使用模板。签名不包含模板参数。
是否可以定义指向此类模板函数的指针?
我尝试了以下定义但会导致编译错误。
typedef template<typename T> void (СSomeClass::*TFuncPtr)(int);
答案 0 :(得分:8)
一旦实例化,成员函数模板只是一个普通的成员函数,所以你可以使用普通的成员函数指针(最好typedef
'如下):
typedef void (C::*mem_fun_ptr)(int);
mem_fun_ptr p = &C::Func1<Bar>;
// IMPORTANT -- ^^^^^
下划线部分是重要部分。您不能指向函数模板,但可以指向实例化函数模板。
答案 1 :(得分:2)
你只想要一个指向函数的指针吗? 这很简单:
class C
{
public:
template<typename T> void Func1(int x);
};
typedef void (C::*TFuncPtr)(int);
int main()
{
TFuncPtr ptr = &C::Func1<int>;
}
如果你想要别的东西,你可以展示一个使用你想要的指针的例子吗?