【发布时间】:2009-08-19 16:19:46
【问题描述】:
我认为这个问题很常见。您有一些输入字符串,并且必须根据字符串的内容调用一个函数。类似于字符串的 switch() 之类的东西。 想想命令行选项。
目前我正在使用:
using std::string;
void Myclass::dispatch(string cmd, string args) {
if (cmd == "foo")
cmd_foo(args);
else if (cmd == "bar")
cmd_bar(args);
else if ...
...
else
cmd_default(args);
}
void Myclass::cmd_foo(string args) {
...
}
void Myclass::cmd_bar(string args) {
...
}
在标题中
class Myclass {
void cmd_bar(string args);
void cmd_foo(string args);
}
所以每个 foo 和 bar 我必须重复四 (4!) 次。我知道我可以在之前将函数指针和字符串提供给静态数组并在循环中进行调度,从而节省一些 if...else 行。但是是否有一些宏技巧(或预处理器滥用,取决于 POV),这使得以某种方式定义函数并同时让它自动更新数组成为可能? 所以我只需要写两次,或者如果内联使用可能一次?
我正在寻找 C 或 C++ 的解决方案。
【问题讨论】:
-
这个问题被反复问过,我在这里回答了stackoverflow.com/questions/659581/…
-
他还要求某种注册方案以减少维护字典的工作量。
-
他是,但我认为没有一个能让他满意。你可以用宏做一些粗糙和丑陋的事情,但它的麻烦多于它的价值。
标签: c++ c design-patterns coding-style