【发布时间】:2017-10-16 00:14:00
【问题描述】:
首先假设你有函数
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(),那么前两个pickFunctions 将随着数量线性增长(O(N),其中 N 是选项的数量)可用的选项。有没有办法让函数选择的这种线性增长变成更恒定的增长函数选择?像类似于(funcall input)in LISP 的东西?
【问题讨论】:
-
"当你有更多选择时会发生什么,假设你有 foo1(), foo2(),....foo10000()" ...嗯...你...退出你的工作....
-
参考此页面以更好地理解stackoverflow.com/questions/252748/…
-
@krpra,嗯,原来是这个词,我不知道。但是,这不是只适用于具有相同类型和数量的参数的函数吗?
-
不要忘记调用只发生一次,所以你有相同的参数进入,所以是的,函数应该严格具有相同的原型。 C 就是这样,您可能能够阻止某种子集,其中一些函数具有相同的起始原型但实际参数较少(例如参数 1 和 2 相同,但有些缺少 3 和 4)并转换它们当您初始化数组时。虽然我认为只有 CDECL 会以这种方式工作。
标签: c if-statement input switch-statement