4

我基本上有这个问题:现在,我们有一个系统,它获取一个字符串作为输入,它基本上说 ACTION:。

对于每个动作都有一个自动生成的函数(Rational Rose GRRR),例如

bouncer_comm.chatMessage("data goes here").sendAt(msg->sapIndex0());
bouncer_comm.askforname().sendAt(msg->sapindex0());

bouncer_comm返回一个RTOutSignal,由于玫瑰使用的奇怪结构,我无法手动创建它们。

现在,我唯一的选择是创建一百个左右的 if 语句,我这样做:

if(action == "CHAT")  bouncer_comm.chatMessage("data goes here").sendAt(msg->sapIndex0());

这真的很烦人。

避免这种情况的最佳方法是什么?我已经看过/尝试了无数的东西,这是一个非常旧的理性玫瑰(pre 2k)版本,是的。

如果有人有任何想法,那将是惊人的。

4

5 回答 5

12

我喜欢@cobbal 对上面函数指针散列的想法,但你可以用多态性替换这个条件逻辑。

见: http ://c2.com/cgi/wiki?ReplaceConditionalWithPolymorphism

于 2009-03-21T21:35:01.963 回答
6

哈希存储函数指针在这里可以很好地工作

于 2009-03-21T21:27:42.433 回答
2

我将多态性与工厂模式结合使用。我为此减少了很多如果:


MyAbstractClass *ac = Factory::getHandlerFor(data);
ac->perform(parameters);
于 2009-03-21T21:40:57.503 回答
1

我认为最简单的是 boost::functions 的映射。

于 2009-03-21T21:46:43.900 回答
0

您可以使用 boost::bind 或 boost::function 和地图。这将允许您调用正确的函数,即使知道每个函数都有不同数量的参数。

如果您不想要任何额外的代码,您可以使用函数对象和继承。

于 2009-03-21T21:39:30.377 回答