Предположительно, единственная интересная вещь, которую вы можете сделать с типом, о котором они знают только то, что он - это перечисление, приведение его к его базовому типу и работа с ним. Вот как это может выглядеть, используя предложенный Джеймсом подход (AKA SFINAE ):
void Bar(int b); // and/or other underlying types
template<typename T>
typename std::enable_if<std::is_enum<T>::value, void>::type
Foo(T enm)
{
Bar(static_cast<typename std::underlying_type<T>::type>(enm));
}
В качестве связанного бонуса, вот аналогичный метод, который будет разрешен только для определенного типа по вашему выбору (замените bool в is_same
на тип по вашему выбору):
template<typename T>
typename std::enable_if<std::is_same<T,bool>::value, void>::type
Baz(T bl)
{
if (bl)
{
//...
}
else
{
//...
}
}