ユーザーのファイルシステムをスキャンし、ベクトルにパスを入力してから、ソートするかどうかの関数があります。ユーザーはベクトルをソートするかどうかをコンパイル時に決定できるはずなので、非常に望ましい (しかし存在しない) "静的 if" の代わりに、テンプレートとヘルパー クラスを使用します。
次のコードを検討してください。
enum class Sort{Alphabetic, Unsorted};
template<Sort TS> struct SortHelper;
template<> struct SortHelper<Sort::Alphabetic>
{
static void sort(vector<string>& mTarget) { sort(begin(mTarget), end(mTarget)); }
};
template<> struct SortHelper<Sort::Unsorted>
{
static void sort(vector<string>&) { }
};
template<Sort TS> struct DoSomethingHelper
{
static void(vector<string>& mTarget)
{
// do something with mTarget
SortHelper<TS>::sort(mTarget);
}
};
私が上で書いたコードは、元のから非常に単純化されており、複数のテンプレート パラメーターを使用して、ユーザーがコンパイル時に関数の結果をさらにカスタマイズできるようにしています。
これらのヘルパー クラスをすべて使用する代わりの方法はありますか? 本当にぐちゃぐちゃで読みにくいです。
理想的には、これは私が書きたいものです:
enum class Sort{Alphabetic, Unsorted};
template<Sort TS> struct DoSomethingHelper
{
static void(vector<string>& mTarget)
{
// do something with mTarget
static_if(TS == Sort::Unsorted) { /* do nothing */ }
static_if(TS == Sort::Alphabetic) { sort(begin(mTarget), end(mTarget)); }
}
};