gpt4 book ai didi

c++ - 当函数是指向类函数的指针但在该类之外时如何正确调用函数

转载 作者:行者123 更新时间:2023-11-30 02:49:16 25 4
gpt4 key购买 nike

抱歉,如果标题措辞不当......但这是我正在尝试做的......

我有一个结构“screen”,它有一个指向这些函数的指针,这些函数是类“Test”的成员......

typedef struct screen{

...

bool (Test::*drawfunc)(b2World*, objectdata*, actorlist*, camera*);

...

}

class Test{

...

screen* tscreen;

bool Test::draw(b2World* world, objectdata* objects, actorlist* al, camera* cam);

...

}

我在创建我的测试实例“test”时分配了 drawfunc 指针,就像这样......我觉得它很奇怪,我不完全理解它,但它编译......

Test::Test()
{

...

tscreen->drawfunc=&Test::draw;

...

}

但我无法弄清楚如何在我的主程序中调用 drawfunc 函数...我正在这样尝试它并给出错误“错误 C2064:术语不计算为采用 4 个参数的函数”

int main (int acrgc, char** argv){

...

Test* test = new Test();

test->tscreen->drawfunc(test->m_world, test->objects, test->tscreen->al, test->tscreen->cam);

...

}

我知道这个调用是不对的,我从来没有指定 drawfunc 从哪个类“Test”的实例开始工作……即使所有变量和指向函数本身的指针都来自实例“test”。 ..

...以及不可避免的“你为什么要尝试这样做?”回复...或者万一没有办法调用该函数或其他东西...我真的只想能够为“drawfunc”分配不同的函数,我希望这些函数能够使用所有变量在实例“test”中,我可以获得它,因此 drawfunc 指向任何旧函数( bool (drawfunc)(b2World, objectdata*, actorlist*, camera*); ),但它需要能够访问测试实例“test”中的其他变量。所以......真的只是你这样做也很棒。谢谢。

最佳答案

你这样做:

(test ->* test->tscreen->drawfunc)(test->m_world, test->objects, test->tscreen->al, test->tscreen->cam);

通常,间接指向指向成员的指针涉及使用->*.* 运算符。如果你有一个指向对象的指针 a 和一个指向成员的指针 b,那么你会说 a ->* b。在您的例子中,指向对象的指针是 test,指向成员的指针是 test->tscreen->drawfunc。额外的括号是必要的,因为 ->* 是一个二元运算符,它的优先级低于后缀函数调用运算符 (),但你想间接指针 -在调用它之前加入成员。

关于c++ - 当函数是指向类函数的指针但在该类之外时如何正确调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21365111/

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