指向类成员的模板函数的C++指针

标签 c++ templates function pointers

我在“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):

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

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

关于指向类成员的模板函数的C++指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8152875/

相关文章:

c++ - 对编译器C++ FreeBSD上的符号 'FCGX_InitRequest'的错误 undefined reference

c++ - 将 JSON 对象存储到 C++ 映射

javascript - 如何使用 jQuery 在列表中选择正确的按钮?

C++成员函数模板的隐式实例化

mysql - 使用函数的 SQL VIEW (phpMyadmin)

c++ - 结构中的字符

c++ - C++ 中的可移植 wchar_t

等参数的 C++ 函数特化

r - 如何创建一个根据指定字典重命名列名称的函数?

根据用户输入创建函数