멤버 함수의 주소를 가져 오려고하는데 어떻게해야할지 모르겠다. 누군가 내가 잘못하고있는 것을 말할 수 있다면 고맙겠습니다. 당신이 아래에있는 내 예에서 볼 수 있듯이,도 (긴) & g도 (긴) & this-> g 작업과 내가 올바른 구문을 알아낼 수 없습니다 : 사전에이 포인터와 멤버 함수 주소
/* Create a class that (redundantly) performs data member selection
and a member function call using the this keyword (which refers to the
address of the current object). */
#include<iostream>
using namespace std;
#define PR(STR) cout << #STR ": " << STR << endl;
class test
{
public:
int a, b;
int c[10];
void g();
};
void f()
{
cout << "calling f()" << endl;
}
void test::g()
{
this->a = 5;
PR((long)&a);
PR((long)&b);
PR((long)&this->b); // this-> is redundant
PR((long)&this->c); // = c[0]
PR((long)&this->c[1]);
PR((long)&f);
// PR((long)&g); // this doesn't work
// PR((long)&this->g); // neither does this
cout << endl;
}
int main()
{
test t;
t.g();
}
감사합니다!
답장을 보내 주셔서 감사합니다. 그러나 나는 아직도 그것을 작동시키지 않는다. 내가
PR((long)&test::g);
에 선
PR((long)&g);
를 변경하는 경우, 그것은 여전히 작동하지 않습니다.
PR(&test::g);
() 주에서 작동하지만하지
PR((long)&test::g);
???
나는 뭔가를 놓치고 있다고 생각합니다. :(
주소가 반드시 숫자 일 필요는 없습니다 (너무 길면 충분하지 않을 수도 있음). 캐스트 (void *) 스트림 코드는 그냥 주소를 인쇄합니다. –