gpt4 book ai didi

c++ - 我有一个指向参数化函数的指针的成员,我可以扩展参数类型吗?

转载 作者:行者123 更新时间:2023-11-28 06:31:39 25 4
gpt4 key购买 nike

构造函数获取并设置具有以下类型的成员:

void (*callBackFunc)(void *context, VideoSprite *pCaller)

现在我需要扩展它以包含比 VideoSprite 保存的更多的数据。我将像这样在 static 回调中使用 static_cast:

static void staticFuncToInitRot(void *context, VideoSprite *pCaller)
{
spinningSprite *winSpin = static_cast<spinningSprite*>(pCaller);

这样可以吗?没有切片或任何难以检测的风险?您还可以告诉我将调用哪个 c'tor 以及为什么?

    DelayedCallback(void *context, VideoSprite *pCaller, std::function<void(void *context, VideoSprite *pCaller)> lambda) :
lambda(lambda),
callBackFunc(NULL),
context(context),
pCaller(pCaller),
{}
DelayedCallback(void *context, VideoSprite *pCaller, void (*callBackFunc)(void *context, VideoSprite *pCaller)) :
callBackFunc(callBackFunc),
context(context),
pCaller(pCaller),
{}

只有一个替代成员被NULL化,因为回调执行:

            if (callBackFunc) callBackFunc(context, pCaller);
else lambda(context, pCaller);

我不记得我是否需要 lambda 或将其留在那里以备将来验证的好处。

VideoSprite 中这样调用 c'tor(contextnullptr)

actionList.push_back(new DelayedCallback(context, this, callBackFunc));

其中 callBackFunc 是指向

的指针
static void staticFuncToInitRot(void *context, VideoSprite *pCaller)

我真的不需要 dynamic_cast 谢谢,感谢您的关心。

最佳答案

static void staticFuncToInitRot(void *context, VideoSprite *pCaller)
{
spinningSprite *winSpin = static_cast<spinningSprite*>(pCaller);

Is this okay? No risk of slicing or anything hard to detect? Also can you tell me which c'tor will be called and why?

最好做一个 dynamic_cast 来确保你不会不小心将 VideoSprite 的另一个子类型转换为 spinningSprite 并且假设它是一个有效的转换。

static void staticFuncToInitRot(void *context, VideoSprite *pCaller)
{
spinningSprite *winSpin = dynamic_cast<spinningSprite*>(pCaller);
if ( winSpin )
{
// Safe to use the pointer
}
}

至于调用哪个构造函数...

当您使用时:

actionList.push_back(new DelayedCallback(context, this, callBackFunc));

将调用第二个构造函数。我不知道为什么你觉得它是模棱两可的。第二个构造函数接受一个参数,该参数的类型与正在使用的参数直接匹配。

您可以通过使用强制使用第一个构造函数

actionList.push_back(new DelayedCallback(context, this, std::function<void(void *, VideoSprite *)>(callBackFunc)));

关于c++ - 我有一个指向参数化函数的指针的成员,我可以扩展参数类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27426626/

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