2013-11-09 4 views
0

나는 C++ 기능 클래스를 ClassA에서 포인터가로 함수 포인터가 가리키는 할당 기능 :C++ 다른 함수 포인터

: 할당을 사용하여

void func(); 

: 기능 가리키는

void (ClassA::*funcPntr1)(void); 

functPntr1 = &ClassA::func; 

이제는 다른 함수 포인터가 있습니다.

void (ClassA::*funcPntr2)(void); 

funcPntr2가 funcPntr1이 가리키는 함수를 가리 키도록합니다. 어떻게하면됩니까?

funcPntr2 = &(this->*funcPntr); //normally, i invoke the function pointer by (this->*funcPntr)() 

을하지만 잘못 :

나는이 시도했다. 많은 논리 조합을 시도했지만 작동하지 않는 것 같습니다. 과제와

+3

'funcPntr2 = funcPntr;'? – chris

+0

하지만 포인터가 가리키는 함수가 아니라 포인터를 복사하는 것이 아닌가요? – Alterecho

+0

funcPntr2가 funcPntr의 참조 대상을 참조하게하려면 funcPtr2가 funcPntr과 같아야합니다. 그래서 funcPtr2 = funcPntr; – zmccord

답변

1

: 다른 사람이 (funcPntr2 = funcPntr) 말했듯이

funcPntr2 = funcPntr; 
+0

그냥 포인터를 가리키고 포인터가 가리키는 함수를 복사하지 않습니까? – Alterecho

+3

@Alterecho : 함수는 객체가 아니며 멤버 함수도 아닙니다. "기능 복사"라는 개념은 없습니다. –

+0

할당 후 funcPntr이 가리키는 함수를 변경하면 어떻게됩니까? – Alterecho

1

현재 할당 된 포인터를 할당 할 경우, 그것은 단순한 과제이다.

이 지정을 유지하려면 i. 이자형. funcPntr2이 항상 funcPntr이 가리키는 위치를 가리키고 싶다면, 후자가 변경 되더라도 정의를 변경하지 않으면 아무런 변화가 없습니다.

  • void (ClassA::**funcPntr2)(void);
  • 할당 funcPntr2 = &funcPntr
  • 전화 (*funcPntr)()이에

    당신은이 것입니다.

당신이 C++에 대해 이야기 할 때, 나는 익숙하지 않습니다. 어쩌면 참조로 무언가를 할 수 있습니다.

+0

여전히 첫 번째 funcPntr에 따라 다릅니다. 할당 후 funcPntr2를 독립적 인 funcPntr1로 만들려고합니다. 그럼 그걸 할 방법이 없나요? – Alterecho