我有一个应用程序,其中的参数列表不能太长。我可以这样运行我的应用程序:./app -operations a b c d e f g h i j ...
等等。我的a,b,c ...
是我想运行的算法(在我的代码中定义的函数)。为了能够处决他们,我有这样的东西:
if(a)
funA();
if(b)
funB();
if(c)
funC();
...
它看起来不好看,是吗?我必须说,有更多的调用,而不仅仅是26个,因为我的应用程序不断增长,我的参数列表也在增长。我在找一种更简单/更漂亮的方法。有可能吗,有想法的人吗?
我不想使用C++和外部库来简化它。它能用纯C语言完成吗?
最佳答案
下面是一个非常简单的可能选项:
#include <stdio.h>
// create a common structure to hold all your
// function parameters;
typedef struct Parameters
{
int p1;
int p2;
} Param_Type;
// sample function 1
void func1( Param_Type *params ) {
printf("hi from func1: %d\n", params->p1 );
}
// sample function 2
void func2( Param_Type *params ) {
printf("hi from func2: %d\n", params->p2 );
}
int main() {
Parameters p;
// parse the command line and populate the parameters struct;
p.p1 = 1;
p.p2 = 1;
//create a lookup table with pointers to each function.
void (*F_A[2])(Param_Type *) = {func1, func2};
//You will still need some function, that given a set of arguments, can
// derive and return an index into the array that maps to the correct
/ function.
int func_idx = your_mapping_function(...) // todo
// dispatch the correct function call.
(*F_A[func_idx])(&p);
return 0;
}