gpt4 book ai didi

c++ - 我可以简化这个吗?

转载 作者:搜寻专家 更新时间:2023-10-30 23:50:57 25 4
gpt4 key购买 nike

typedef void (FunctionSet::* Function)();

class MyFunctionSet : public FunctionSet
{
protected:
void addFunctions()
{
addFunction(Function(&MyFunctionSet::function1));
}

void function1()
{
// Do something.
}
};

addFunction 方法将函数添加到基类中的列表中,
然后可以枚举以调用所有函数。

有什么方法可以简化(减少打字工作)函数的添加吗?

最佳答案

看起来您将一个指向派生类函数的成员函数指针分配给了一个指向基类函数的成员函数指针。好吧,那是被禁止的,因为它在类型系统中打开了一个漏洞。这是一个惊喜(至少对我来说,这是我第一次听到)。阅读this answer为什么。

要回答您的实际问题 - 我会让 addFunction 成为模板:

void addFunctions() {
addFunction(&MyFunctionSet::function1);
}

将基类中的 addFunction 更改为:

template<typename Derived>
void addFunction(void(Derived::*f)()) {
myFunctions.push_back(static_cast<Function>(f));
}

最好使用 static_cast,因为它会告诉您 Derived 是否真的派生自 FunctionSet

关于c++ - 我可以简化这个吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/459649/

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