3

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

1 回答 1

3

你需要template

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

因为模板handle是用依赖类型限定的。(就像你使用typename一个类型是否符合依赖类型一样。)

于 2010-11-03T04:30:34.790 回答