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/