首先假设你有函数
void foo1 (...)
{...}
void foo2 (...)
{...}
void foo3 (...)
{...}
void foo4 (...)
{...}
void foo5 (...)
{...}
现在我知道我们可以使用其中任何一个来选择一个函数
void pickFunction1(char input[])
{
if (strcmp(input, "foo1") == 0) foo1(...);
else if (strcmp(input, "foo2") == 0) foo2(...);
else if (strcmp(input, "foo3") == 0) foo3(...);
else if (strcmp(input, "foo4") == 0) foo4(...);
else if (strcmp(input, "foo5") == 0) foo5(...);
}
void pickFunction2(char input[])
{
switch(input) {
case 'foo1' :
foo1(... );
break;
case 'foo2' :
foo2(... );
break;
case 'foo3' :
foo3(... );
break;
case 'foo4' :
foo4(... );
break;
case 'foo5' :
foo5(... );
break;
}
现在我的问题是,当您有更多选项时会发生什么,假设您有 foo1(), foo2(),....foo10000()
然后是前两个 pickFunction
s 将随着可用选项的数量线性增长(O(N),其中 N 是选项数量)。有没有办法使函数选择的这种线性增长变成更恒定的增长函数选择?就像 LISP 中类似于 (funcall input)
的东西?
最佳答案
看一下函数指针数组
,它是一个数组,其中数组的每个单元格都存储函数的地址。可以循环填写,用法相同。
关于c - 当你有很多选项时如何输入要运行的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46761321/