事前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つのスペシャライゼーション以上のものが必要です。つまり、enumまたはintegral valueを使用して、必要なすべてのenumを専門にすることができます。
もう一つの方法は、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>();
}
++ 17機能 – max66
はい、わかっています、最新のMSVCはC++を完全にサポートしていません17。 –
SFINAEはC++を必要としません。[simulate-static_if-with-c11c14](https://baptiste-wicht.com/posts/2015/07/simulate-static_if-with-c11c14.html) – Jarod42