Czy istnieje sposób zapewnienia, że parametr szablonu jest typem klasy wyliczeniowej?Upewnij się, że parametr szablonu jest klasą wyliczeniową
Wiem, że type_traits
ma type_traits
ma , ale nie chcę, aby dopasować regularne wyliczenia, tylko enum_classes.
Przykład efektu Poszukiwany
enum class EnumClass {};
enum Enum {};
class Class {};
template <typename T>
void Example()
{
static_assert(/* T is EnumClass */, "`T` must be an enum class");
}
Example<EnumClass>(); // Ok
Example<Enum>(); // Error
Example<Class>(); // Error
Używam C++ 11, i niestety nie może iść wyżej (choć byłbym ciekaw rozwiązania w każdym razie, nawet jeśli wiąże się to nowe standardy).
Czy to możliwe?
Popraw mnie jeśli się mylę, ale jesteś po prostu w zależności od faktu, że klasy enum nie są niejawnie zamienny do całek? Czy nie jest możliwe zdefiniowanie niejawnego operatora konwersji? –
@GiladNaaman jak definiujesz niejawny operator z 'klasy enum'? –
Tak, mój zły, nie możesz faktycznie zdefiniować operatorów lub funkcji wewnątrz "klasy enum". –