Здравствуйте, Аноним, Вы писали:
А>Есть такая структура на С:
А>А>typedef void (*Function)(int param);
А>struct A
А>{
А> Function function;
А>};
А>
А>и C++ класс:
А>А>class B
А>{
А>public:
А> static void functionX(int param);
А>};
А>
А>Подскажите, пожалуйста, как можно присвоить function functionX из класса B?
Только если сделать метод статическим, тогда он действительно может принимать один аргумент.
Если же нужно вызывать нестатический метод, то придется изменить многое:
typedef void (*Function)(void * inst, int param);
struct A
{
Function function;
};
class B
{
public:
static void functionX_(void * inst, int param) { static_cast<B *>(inst)->functionX(param); }
void functionX(int param);
};
[/code]
[ccode]
A a;
B b;
a.function = b.functionX_;
a.function(&b, 123);
Есть такая структура на С:
typedef void (*Function)(int param);
struct A
{
Function function;
};
и C++ класс:
class B
{
public:
void functionX(int param);
};
Подскажите, пожалуйста, как можно присвоить function functionX из класса B?
void RegisterX(B* b)
{
A a;
a.function = b->functionX; //ERROR
}
Здравствуйте, Аноним, Вы писали:
А>Есть такая структура на С:
А>А>typedef void (*Function)(int param);
А>struct A
А>{
А> Function function;
А>};
А>
А>и C++ класс:
А>А>class B
А>{
А>public:
А> void functionX(int param);
А>};
А>
А>Подскажите, пожалуйста, как можно присвоить function functionX из класса B?
А>А>void RegisterX(B* b)
А>{
А> A a;
А> a.function = b->functionX; //ERROR
А>}
А>
Никак. У этих переменных разные типы. B::functionX имеет ДВА параметра(один из них неявный аргумент this)
Здравствуйте, gbt, Вы писали:
А>>Подскажите, пожалуйста, как можно присвоить function functionX из класса B?
gbt>Только если сделать метод статическим, тогда он действительно может принимать один аргумент.
gbt>Если же нужно вызывать нестатический метод, то придется изменить многое:
gbt>gbt>typedef void (*Function)(void * inst, int param);
gbt>struct A
gbt>{
gbt> Function function;
gbt>};
gbt>
gbt>gbt>class B
gbt>{
gbt>public:
gbt> static void functionX_(void * inst, int param) { static_cast<B *>(inst)->functionX(param); }
gbt> void functionX(int param);
gbt>};
gbt>[/code]
gbt>[ccode]
gbt> A a;
gbt> B b;
gbt> a.function = b.functionX_;
gbt> a.function(&b, 123);
gbt>
НЕ нужно давать такие советы
Здравствуйте, jedi, Вы писали:
gbt>>gbt>>typedef void (*Function)(void * inst, int param);
gbt>>struct A
gbt>>{
gbt>> Function function;
gbt>>};
gbt>>
gbt>>gbt>>class B
gbt>>{
gbt>>public:
gbt>> static void functionX_(void * inst, int param) { static_cast<B *>(inst)->functionX(param); }
gbt>> void functionX(int param);
gbt>>};
gbt>>
gbt>>gbt>> A a;
gbt>> B b;
gbt>> a.function = b.functionX_;
gbt>> a.function(&b, 123);
gbt>>
J>НЕ нужно давать такие советы
Да, с форматированием накосячил или вы про что?
Здравствуйте, Аноним, Вы писали:
А>Есть такая структура на С:
А>А>typedef void (*Function)(int param);
А>struct A
А>{
А> Function function;
А>};
А>
А>и C++ класс:
А>А>class B
А>{
А>public:
А> void functionX(int param);
А>};
А>
А>Подскажите, пожалуйста, как можно присвоить function functionX из класса B?
А>А>void RegisterX(B* b)
А>{
А> A a;
А> a.function = b->functionX; //ERROR
А>}
А>
А разве не так надо?
//определили
typedef void (B::*Function)(int param);
//присвоили
a.function = &(B::functionX);
//вызвали
(b->*(function))(param);
Hello, SergeyL!
You wrote on Wed, 03 Aug 2005 07:17:59 GMT:
S> Здравствуйте, Аноним, Вы писали:
А>> Есть такая структура на С:
[skipped...]
S> А разве не так надо?
S> [code]
S> //определили
S> typedef void (B::*Function)(int param);
Ключевым здесь является, то что у автора структура на C
With best regards, Sergey Zizyov. E-mail: ziserg@despammed.com
Posted via RSDN NNTP Server 1.9