我需要创建我的抽象数据类型的实例,但创建实例需要一些参数。现在,我应该如何将这些参数传递给函数?有很多参数,我希望它们中的大多数都是默认值。我看到了几种解决此问题的方法,但是我无法确定哪种方法最好。
第一个选项:
MyADT_t *my_adt_create( const char* a_long_config_string);
..哪里a_long_config_string
是一个字符串"param1=value;param2=value"
这很吸引人,但我想函数内部的字符串解析(和错误检查)会很混乱。
第二种选择:
MyADT_t *my_adt_create( int paramc, char *paramv[]);
这模仿了命令行输入样式main(int argc, char *argv[])
,并且可以使用命令行选项库来实现,例如 getopt 或 popt。
第三个选项:
使用可变参数函数,例如:
MyADT_t *my_adt_create( int mandatory_param, ...);
..然后在函数中成对地读取参数和值。也许与第二种选择没有太大区别,但仍然不同。
附加信息:我猜工厂方法的一些参数将从命令行选项中提供。这会让选择变得更简单吗?
编辑
清除:如果我希望我的程序像这样启动:
myprog --some-general-opt=hello --adt-optinon-a=value --adt-option-b=value
或者可能:
myprog --some-general-opt=hello --adt-options='a_long_config_string'