gpt4 book ai didi

c++ - 使用函数指针在类之间传递数据

转载 作者:太空狗 更新时间:2023-10-29 23:53:34 25 4
gpt4 key购买 nike

我试图通过传递一个函数指针来使类似的东西工作。我知道你可以将第一个类的指针传递给第二个,然后让第二个通过指针触发第一个类的成员函数。但我不想让二等类依赖于知道一等类是谁。这更像是我正在寻找实现这一目标的编码风格。谢谢

//////////////////////////////////////////////////
class Second
{
public:
Second::Second(void (*SecondTriggered)(void));
};

Second::Second(void (*SecondTriggered)(void))
{
SecondTriggered();
}


//////////////////////////////////////////////////
class First
{
public:
First::First();
void SecondTriggered();
Second *second;
};

First::First(){
printf("first class was created");
second = new Second(SecondTriggered);
}

void First::SecondTriggered(){
printf("second class was created and responded");
}

/////////////////
int main()
{
First *first = new First();
}

我收到这个错误:

error C3867: 'First::SecondTriggered': function call missing argument list; 
use '&First::SecondTriggered' to create a pointer to member

任何想法。

最佳答案

您正试图在需要独立函数的地方传递一个非静态类成员。要执行您正在尝试的操作,您必须改为执行以下操作:

class Second
{
public:
    Second::Second(void (*SecondTriggered)(void*), void *arg);
};

Second::Second(void (*SecondTriggered)(void*), void *arg)
{
    SecondTriggered(arg);
}


//////////////////////////////////////////////////
class First
{
public:
    First::First();
    static void SecondTriggered(void *arg);
    Second *second;
void DoSomething();
};

First::First(){
    printf("first class was created");
    second = new Second(&SecondTriggered, this);
}

void First::SecondTriggered(void *arg){
    printf("second class was created and responded");
static_cast<First*>(arg)->DoSomething();
}

void First::DoSomething(){
printf("first class did something");
}

/////////////////
int main()
{
    First *first = new First();
 }

关于c++ - 使用函数指针在类之间传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10291467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com