C ++에서 차이 클래스의 멤버-기능 포인터를 보유 할 수있는 유형은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/2467384

문제

다른 클래스의 멤버-기능 포인터를 보유 할 배열이 필요합니다. 배열을 어떻게 정의 할 수 있습니까?

코드는 다음과 같습니다.

arr[0] = &CMyClass::FuncX;
arr[1] = &CYourClass::FuncY;
arr[2] = &CHerClass::FuncZ;

나는 시도했다 void*, 그러나 작동하지 않습니다.

도움이 되었습니까?

해결책

당신은 할 수 없습니다. 그것들은 모두 다른 유형이며 어레이는 균질합니다.

인수가 무엇인지 또는 반환 값이 무엇인지에 관계없이, 암시 적입니다. this 클래스 유형에 고유합니다. 클래스 멤버 포인터의 유형은 다음과 같습니다.

return_value (class_type::*)(parameters);

보시다시피, 다른 클래스에 속하기 때문에 항상 다른 유형이 될 것입니다. 그것이 같은 클래스이더라도 return_value 그리고 parameters 배열을 만들려면 일관성이 있어야합니다. 그렇지 않으면 여전히 다른 유형이 있습니다.

더 큰 그림은 무엇입니까? 부스트 ~와 함께 부스트 기능 생각 나다. 또한 가상 기능이 문제를 해결할 수 있습니다.

다른 팁

다른 사람들이 지적했듯이, 포인터를 다른 종류의 기능에 직접 저장할 수는 없습니다. 당신은 그것을보고 싶을 수도 있습니다 Command 템플릿, 예를 들어 현대 C ++ 디자인, 적어도 다른 호출 가능한 "물건"(포인터 또는 스마트 포인터에 함수, 기능, 멤버 기능)을 하나의 것에 넣을 수 있습니다.

그 자체로는 아마도 충분하지 않을 것입니다. 당신은 다른 유형에 걸쳐 다른 유형을 인스턴스화하는 템플릿으로 끝날 것입니다. 이러한 유형은 모두 동일한 구문을 사용하지만 모두 배열로 들어가는 것은 아닙니다 (단일 유형이 필요).

제약 조건에 따라 (컴파일 타임 대 런타임 인덱싱, 특히) Boost :: Tuple을 사용하여 명령 개체 모음을 저장할 수 있습니다. 숫자 인덱싱을 사용하여 개별 항목에 도달하는 배열처럼 취급 할 수 있습니다. 그러나 일반 배열과 달리 :

  1. 구문은 약간 추악하고
  2. 인덱싱은 컴파일 타임 (컴파일 타임 상수 사용)에서 수행해야합니다.

함수의 매개 변수 또는 반환 유형을 모르면 정의하기가 어렵습니다. 페이지 그것의 요지를 얻거나 함수의 선언을 게시합니다.

다른 사람들은 왜 당신이 이것을 할 수 없는지 주목했습니다. 그러나 당신이 할 수 있더라도, 당신은 그것으로 무엇을 할 수 있습니까? 멤버 기능 포인터를 호출하려면 호출하려면 적절한 유형의 객체가 필요합니다. 따라서 각 멤버 함수 포인터의 유형을 알아야합니다. 물러서서 성취하려는 것이 무엇인지 알아 내야합니다.

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