我有一个函数可以扫描用户的文件系统,用路径填充一个向量,然后对它进行排序或不排序。由于用户应该能够在编译时决定是否要对向量进行排序,因此我使用模板和辅助类来代替非常需要的(但不存在的)“静态 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)); }
}
};