尽管我害怕你会告诉我这个话题已经讨论过好几次了,但我还是敢问,因为我无法产生解决方案。可能我只是在寻找错误的东西......
假设我有一个从某个外部函数接收“模式”的函数。根据模式,函数将调用同一对象的不同成员函数。对于没有任何参数的成员函数,这对我来说效果很好,但我没有找到如何将它扩展到有参数的成员。在现实世界的应用程序中,参数不是 int/float 而是更复杂的类,并且调用嵌套在不同的循环中,所以我需要多次放置我认为丑陋的 switch 语句。
问题 A:是否可以在现有设计的基础上轻松添加对带有参数的成员函数的支持?如果是,如何做到这一点?如果可能没有外部库...
问题 B:这是一个完全错误/糟糕的方法吗?我该怎么做才能做得更好?
非常感谢您的帮助和解释。
克里斯
标题摘录:
typedef void (Object::*memberFunction)();
class Object
{
void memberFnNoArg();
void memberFnWithIntArg(int arg);
void memberFnWithFloatArg(float arg);
}
cpp摘录:
void function()
{
int mode = getModeFromSomewhere();
int intArg = 33;
float floatArg = 66.6;
switch(mode)
{
case 1:
process(&Object::memberFnNoArg);
break;
case 2:
process(&Object::memberFnWithIntArg, ???); // how can I pass arg?
break;
case 3:
process(&Object::memberFnWithFlaotArg, ???); // how can I pass arg?
break;
default:
// do nothing;
}
}
void process(Object::memberFunction func)
{
Object object;
// loops, called several times, ...
(object.*func)(); // how do I handle different arguments?
}