如何从模板类型中获取指向模板化成员函数的指针?

Posted

技术标签:

【中文标题】如何从模板类型中获取指向模板化成员函数的指针?【英文标题】:How can you get pointer to a templated member function from a template type? 【发布时间】:2010-11-03 04:28:28 【问题描述】:

以下代码无法编译...知道为什么吗?这是非法的 C++ 吗?

class Handler 
 public:
  template <typename T>
  void handle(T t)     
;

class Initializer 
 public:
  template <typename T, typename H>
  void setup(H *handler) 
    void (H::*handle)(T) = &H::handle<T>; // fails
  
;

int main() 
  Initializer initializer;
  Handler handler;
  initializer.setup<int, Handler>(&handler);

【问题讨论】:

【参考方案1】:

你需要template:

void (H::*handle)(T) = &H::template handle<T>; 

因为模板handle 是用依赖类型限定的。 (就像你使用typename,如果一个类型被一个依赖类型限定。)

【讨论】:

以上是关于如何从模板类型中获取指向模板化成员函数的指针?的主要内容,如果未能解决你的问题,请参考以下文章

std::async 与共享指针模板化成员函数

为啥我不能从 gcc 中的前身模板化成员函数访问祖先方法?

在 gcc 上将成员函数指针传递给模板成员函数时出现问题

如何获取指向专门针对字符串的模板函数的指针?

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

使用模板化成员函数显式实例化模板类