class Base
{
protected:
typedef View * ViewType;
typedef boost::function<ViewType()> ActionType;
typedef boost::unordered_map<std::string, ActionType> ActionMapType;
ActionMapType actions;
template <class ControllerType>
inline void addAction(std::string actionName, ViewType (ControllerType::*action)()) { actions.insert(ActionMapType::value_type(actionName, bind<ViewType>(&action, static_cast<ControllerType *>(this)))); }
};
class Derived : public Base
{
Derived()
{
addAction("someAction", &Derived::foo); // No template
}
ViewType foo() { cout << "foo"; }
}
내가 ControllerType으로 파생 지나가는 오전 알고 있지만, 어떻게 컴파일러가 파생 것을 확실히 알 수있는 템플릿입니다 매개 변수? 당신이 addAction()
함수 호출에 &Derived::foo
지정 (그리고, 말, &SomethingElse::foo
) 때문에이 Derived
알고
나는 이미 가지고있다. 그 일이 왜 일어 났는지 묻고있었습니다. Bruce의 답변을 참조하십시오. –
당신은 템플릿 인수 공제가 어떻게 작동하는지 알지만 템플릿 인자 공제가 있는지 모릅니다. – AnT
템플릿 차감이 발생할 수 있음을 알고 있었지만, 실제로 알지 못했습니다. 그것이 작동했을 때 함수 포인터와 관련이 있다고 생각했지만 확실하지 않았습니다. 또한 나는 템플릿 인자 공제가 존재한다는 것을 몰랐다. –