오버로드 된 멤버 함수의 주소를 얻는 방법은 무엇입니까?
-
22-08-2019 - |
문제
나는 특정 버전의 포인터를 얻으려고 노력하고 있습니다. 과부하 회원 기능. 예는 다음과 같습니다.
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 회원 기능을했으며, 이것을 답으로 게시해야한다고 말했습니다.
제휴하지 않습니다 StackOverflow