如何从模板类型获取指向模板化成员函数的指针?
以下代码无法编译...知道为什么吗?这是非法的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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要
template
:因为模板
handle
使用依赖类型进行限定。 (就像您使用typename
如果类型由依赖类型限定。)You need
template
:Because the template
handle
is qualified with a dependent type. (Just like you usetypename
if a type is qualified with a dependent type.)