문제

나는 이것에 대한 방법에 대해 온라인으로 약간의 독서를했는데, 나는 그것을 올바르게하고 있다고 생각합니다 ... 내 목표는 수업의 멤버-비트에 포인터를 포함하는 구조 객체를 갖는 것입니다.

지금까지 내가 가지고있는 것은 다음과 같습니다 ...

typedef void (foo::*HandlerPtr)(...);
class foo
{
public:
    void someFunc(...);
    // ...
private:
    // ...
};

struct STRUCT
{
    HandlerPtr handler;
};

STRUCT stuff[]
{
    {&foo::someFunc}
};

그런 다음 인수의 유무에 관계없이 (실제로 인수 목록을 사용하려고합니다), "핸들러"를 얻습니다.

나는 뭔가를 놓치고 있어야합니다. 그냥 무엇을 모릅니다.

도움이 되었습니까?

해결책

somefunc ()는 정적 메소드가 아니므로 포인터 간 메드 변수를 통해 약간의 foo ()를 호출하려면 foo 객체 인스턴스가 필요합니다.

foo f;
f.*(stuff[0].handler)();

또는:

foo f;
HandlerPtr mthd = stuff[0].handler;
f.*mthd();

또는 포인터 사용 :

foo *f = new foo;
f->*(stuff[0].handler)();
delete f;

또는:

foo *f = new foo;
HandlerPtr mthd = stuff[0].handler;
f->*mthd();
delete f;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top