抽象データ型のインスタンスを作成する必要がありますが、インスタンスの作成にはいくつかのパラメーターが必要です。では、これらのパラメータを関数に渡すにはどうすればよいでしょうか? 多くのパラメーターがあり、それらのほとんどをデフォルト値にしたいと思っています。これを解決する方法はいくつかありますが、どれが最適かを判断することはできません。
最初のオプション:
MyADT_t *my_adt_create( const char* a_long_config_string);
..次a_long_config_string
のような文字列はどこにありますか"param1=value;param2=value"
これは魅力的ですが、関数内で文字列の乱雑な解析 (およびエラー チェック) が行われると思います。
2 番目のオプション:
MyADT_t *my_adt_create( int paramc, char *paramv[]);
これはコマンド ライン入力スタイルmain(int argc, char *argv[])
を模倣しており、getopt や popt などのコマンド ライン オプション ライブラリを使用して実装できます。
3 番目のオプション:
次のような可変関数を使用します。
MyADT_t *my_adt_create( int mandatory_param, ...);
..そして、関数内でパラメーターと値のペアでパラメーターを読み取ります。2番目のオプションと大差ないかもしれませんが、それでも違います。
追加情報:ファクトリ メソッドのパラメーターの一部は、コマンド ライン オプションから提供されると思います。これにより、選択が簡単になりますか?
編集
して明確にする:プログラムを次のように起動したい場合:
myprog --some-general-opt=hello --adt-optinon-a=value --adt-option-b=value
または多分:
myprog --some-general-opt=hello --adt-options='a_long_config_string'