C++での「優れた設計手法」について質問があります。私はC++11で数値ライブラリを作成しており、メタプログラミングやテンプレートベースの手法を数多く使用しています。しかし、私は非常に基本的な質問があります:
ブールフラグによってアクティブ化できるオプションを除いて、2つの非常に近い動作を持つことができる関数について考えてみます。開発者が設定/設定解除できるフラグのみを考慮し、実行時に設定/設定解除できるフラグは考慮しません。デザインには3つの可能性があります:
1)名前に明示的なオプションを指定して2つの関数を記述します。
myFunctionFlag1(...);
myFunctionFlag2(...);
2)テンプレートパラメータを使用します:
template<bool Flag> myFunction(...);
3)可変パラメータを使用します:
myFunction(..., const bool flag);
優れた設計手法の観点から、どのソリューションが許容可能/許容不可能ですか?最良の解決策がある場合、それはどれですか、そしてその理由は何ですか?最悪の解決策がある場合、それはどれですか、そしてその理由は何ですか?
編集:考慮される関数の場合、実行時のオーバーヘッドは無視できると見なされる可能性があるため、これは最も重要なポイントではありません。
編集2:私は3つすべてが機能することを知っています。しかし、私のライブラリにはユーザーがいるので、信頼できる/優れたデザインが必要です。
オプション2は一般的ですか(私には良い妥協案のように思われるため)?