今天可能是基本的.
我有一个输入作为const char*,我想将它与const char*的许多选项进行比较.像我在下面写的那样.
str_equal - 将其视为const char*的比较函数.'str'是输入const char*.
所以,写成这样:
bool function1(const char* str) {
if (str_equal(str, "abc")) {
// Do for abc
} else if (str_equal(str, "def")) {
// Do for def
} else if (str_equal(str, "ghi")) {
// Do for ghi
} ...
...
}
Run Code Online (Sandbox Code Playgroud)
想知道实现这一目标的其他可行方法是什么.如你所见,它看起来非常难看.
我会使用一组结构:
static bool do_abc(void)
{
// ...
}
bool dispatch(const char *str)
{
static const struct {
const char *key;
bool (*func)(void);
} funcs[] = {
{ "abc", do_abc },
{ "def", do_def },
{ "ghi", do_ghi },
};
for (size_t i = 0; i < sizeof funcs / sizeof *funcs; ++i)
{
if(strcmp(funcs[i].text, str) == 0)
return funcs[i].func();
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
这假设所有函数都具有相同的签名,否则很难概括.
顺便说一下,这可以称为"数据驱动代码"的一个例子,这通常很好.
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |