避免千言万语的最佳方法?

时间:2009-03-21 21:24:29

标签: c++ boost rational-rose

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

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

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

bouncer_comm会返回一个RTOutSignal,我无法手动创建它们,因为Rose使用了奇怪的结构。

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

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

这真的很烦人。

避免这种情况的最佳方法是什么?我看过/试过无数的东西,这是理性玫瑰的真正旧版本(前2k),是的。

如果有人有任何令人惊讶的想法。

5 个答案:

答案 0 :(得分:12)

我喜欢@ cobbal关于上面的函数指针哈希的想法,但你可以用多态来替换这个条件逻辑。

请参阅:http://c2.com/cgi/wiki?ReplaceConditionalWithPolymorphism

答案 1 :(得分:6)

哈希存储函数指针在这里可以正常工作

答案 2 :(得分:2)

我使用了多态与工厂模式相结合。我减少了很多,如果这样:


MyAbstractClass *ac = Factory::getHandlerFor(data);
ac->perform(parameters);

答案 3 :(得分:1)

我认为最简单的是boost :: functions的地图。

答案 4 :(得分:0)

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

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