以下代码无法编译...任何想法为什么?这是非法的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);
}
答案 0 :(得分:3)
您需要template
:
void (H::*handle)(T) = &H::template handle<T>;
因为模板handle
符合依赖类型。 (就像使用依赖类型限定类型一样,使用typename
。)