一个预C++ 17层的方法是使用局部模板特,喜欢这里:
template <template T, bool AorB>
struct dummy;
template <typename T, true>
struct dummy {
void MyFunc() { FunctionA<T>(); }
}
template <typename T, false>
struct dummy {
void MyFunc() { FunctionB<T>(); }
}
template <typename T>
void Facade() {
dummy<T, MeetsConditions<T>::value>::MyFunc();
}
如果您需要更多,比2个专业化 - 您可以使用枚举或整数值,并为所有需要的枚举进行专门化。
另一种方法是使用std :: enable_if:
template <typename T>
std::enable_if<MeetsConditions<T>::value, void>::type
MyFunc() {
FunctionA<T>();
}
template <typename T>
std::enable_if<!MeetsConditions<T>::value, void>::type
MyFunc() {
FunctionB<T>();
}
这是一个C++ 17功能 – max66
是的我知道,问题是最新的MSVC不完全支持C++ 17。 –
可能很有意思:[模拟静态图片与c11c14](https://baptiste-wicht.com/posts/2015/07/simulate-static_if-with-c11c14.html) – Jarod42