Как вывести тип класса из типа метода в шаблонах C ++?

В шаблонах, как показано ниже, я хотел бы позвонитьRun(&Base::foo) успешно без необходимости называть базовый тип дважды (как это делается при компиляцииRun<Base>(&Base::foo) вызов). Могу ли я иметь это? Возможно без добавления тонныУвеличение заголовки?

С предоставленным кодом я получаю ошибку:

prog.cpp:26: error: no matching function for call to ‘Run(bool (Base::*)())’

(Вы можете возиться с фрагментом вhttp://ideone.com/8NZkq):

#include <iostream>

class Base {
public:
  bool foo() { return true; }
};

Base* x;

template<typename T>
struct Traits {
  typedef bool (T::*BoolMethodPtr)();
};

template<typename T>
void Run(typename Traits<T>::BoolMethodPtr check) {
  T* y = dynamic_cast<T*>(x);
  std::cout << (y->*check)();
}

int main() {
  Base y;
  x = &y;
  Run<Base>(&Base::foo);
  Run(&Base::foo); // why error?
}

Ответы на вопрос(1)

Ваш ответ на вопрос