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

时间:2010-11-03 04:28:29

标签: c++ templates member-function-pointers

以下代码无法编译...任何想法为什么?这是非法的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 个答案:

答案 0 :(得分:3)

您需要template

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

因为模板handle符合依赖类型。 (就像使用依赖类型限定类型一样,使用typename。)