У меня есть шаблон, подобный этому, который определяет код, специфичный для некоторых шаблонов:
template <typename T>
class CMyClass : public T
{
template<typename T>
inline void CMyClass<T>::SomeFunc()
{
if constexpr(std::is_same_v<T, CSpecialClass>)
{
DoSpecialClassActions();
//...
}
else
{
DoGenericActions();
//...
}
}
}
Но теперь мне интересно, могу ли я использовать подобное условие constexpr
в операторе switch? (Для добавления дополнительных case
операторов на основе шаблона.)
Примерно так (который не компилируется):
template<typename T>
inline void CMyClass<T>::SomeSwitchFunc()
{
switch(message)
{
case 1:
doMsg1();
//...
break;
case 2:
doMsg2();
//...
break;
//...
if constexpr(std::is_same_v<T, CSpecialClass>)
{
case 10:
doMsg10();
//...
break;
}
}
}
}
PS. Я знаю, что могу разделить этот переключатель на два, но я не хочу этого делать, так как это помешает оптимизации компилятора.