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

发布于 2024-09-30 13:06:11 字数 429 浏览 6 评论 0原文

以下代码无法编译...知道为什么吗?这是非法的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);
}

The following code does not compile ... any idea why? Is this illegal 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);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

执笏见 2024-10-07 13:06:11

您需要 template

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

因为模板 handle 使用依赖类型进行限定。 (就像您使用 typename 如果类型由依赖类型限定。)

You need template:

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

Because the template handle is qualified with a dependent type. (Just like you use typename if a type is qualified with a dependent type.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文