Cの関数の動作をプリプロセッサの助けを借りて変更しようとしています。オプションのパラメータのための基本的なパターンは簡単で、また...コンパイル時の関数デコレータ(ラッパー)
をオフに設定したりすることができ、オプションのパラメータを追加します。
#ifdef OPT_PARAM
#define my_func(a, b, opt) _my_func(a, b, opt)
#else
#define my_func(a, b, opt) _my_func(a, b)
#endif
/*the rest of the code always calls "my_func" with all the params
and not the underscored version...*/
#ifdef OPT_PARAM
void _my_func(int a, int b, int opt)
#else
void _my_func(int a, int b)
#endif
{
/*... more #ifdefs surrounding opt uses */
}
条件付きで機能をラップするためのパターンが似ていますが、問題がありますアンダースコアが加算され始めます(入れ子の各レベルごとに1つの余分なものがあります。異なる関数にすることも、ラップされていない場合には次のレベルの#defineにすることもできます)。
ここでコードの複雑さをどのように減らすかについてのアイデアはありますか?
P.S.私はPythonを使いたいと思っています...しかし、これはドライバのためのものです:-(
あなたは確かにvariadic関数を望んでいませんか? http://en.wikipedia.org/wiki/Varargs#Variadic_functions_in_C.2C_Objective-C.2C_C.2B.2B.2C_and_D – Inshallah
かなり私はそれらを望んでいないことを確かめてください!^_ ^私はすでにそれらを使用しており、静的型検査の喪失に非常に懸念しています。 – fortran
おそらく私は何かが不足していますが、これは私にはうまく見えます。余分な複雑さはどこにありますか?入れ子になるのは何ですか? –