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 に答える