문제

나는 특정 버전의 포인터를 얻으려고 노력하고 있습니다. 과부하 회원 기능. 예는 다음과 같습니다.

class C
{
  bool f(int) { ... }
  bool f(double) { ... }

  bool example()
  {
    // I want to get the "double" version.
    typedef bool (C::*MemberFunctionType)(double);
    MemberFunctionType pointer = &C::f;   // <- Visual C++ complains
  }
};

오류 메시지는 "Error C2440 : '초기화': 'Overloaded-Function'에서 'MemberFunctionType'로 변환 할 수 없습니다."

이 경우 작동합니다 f 오버로드되지는 않지만 위의 예에서는 그렇지 않습니다. 어떠한 제안?

편집하다

위의 코드는 내 실제 문제를 반영하지 않았으며, "const"를 잊어 버린 것입니다. 이것이 받아 들여진 답변이 지적한 것입니다. 그래도 문제가 다른 사람들에게 일어날 수 있다고 생각하기 때문에 질문을 그대로 남겨 둘 것입니다.

도움이 되었습니까?

해결책

글쎄, 나는 내가 이미 댓글을 달아서 받아 들일 수 있도록 내가 댓글을달라고 답할 것이다. 문제는 콘트 스네스에 관한 것입니다.

class C
{
  bool f(int) { ... }
  bool f(double) const { ... }

  bool example()
  {
    // I want to get the "double" version.
    typedef bool (C::*MemberFunctionType)(double) const; // const required!
    MemberFunctionType pointer = &C::f;
  }
};

설명:

원래의 질문에는 그것을 포함하지 않았습니다 const. 나는 그가 아마도 f 실제 코드에서 const 멤버 기능이기 때문에 (아직 이전 반복에서는 또 다른 것이 실제 코드와 다른 것으로 판명 되었기 때문에 : P). 그는 실제로 그것이 Const 회원 기능을했으며, 이것을 답으로 게시해야한다고 말했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top