指向模板函数哪个类成员的指针

C++ pointer to template function which class member

本文关键字:成员 指针 函数      更新时间:2023-10-16

我在"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);

一旦实例化,成员函数模板就只是一个普通的成员函数,所以你可以使用普通的成员函数指针(最好的typedef 'd如下):

typedef void (C::*mem_fun_ptr)(int);
mem_fun_ptr p = &C::Func1<Bar>;
//          IMPORTANT -- ^^^^^

下划线部分是重要的部分。不能创建指向函数模板的指针,但可以创建指向实例化的函数模板的指针。

你只想要一个指向函数的指针吗?这很简单:

class C
{
public:
  template<typename T> void Func1(int x);
};
typedef void (C::*TFuncPtr)(int);
int main()
{
 TFuncPtr ptr = &C::Func1<int>;
}

如果你想要别的东西,你能展示一个使用你想要的指针的例子吗?