У меня есть несколько вложенных перечислений, похожих на следующие. Я хочу, чтобы функция isValid()
была определена как можно ближе к определению enum
. Фактический код более многословен с несколькими уровнями вложенных пространств имен и структур.
struct S
{
enum E { V1, V2 };
/* ????? */ bool isValid(E e) { return e==V1 || e==V2; }
};
template <typename Enum>
bool legalValue(Enum e)
{
return isValid(e);
}
Можно ли заставить этот код работать, не помещая isValid()
в глобальное пространство имен?
Пожалуйста, не комментируйте, является ли isValid()
хорошей практикой. Этот вопрос так же применим к тому, кто хочет переопределить operator<<()
, чтобы иметь возможность целенаправленно передавать значения перечисления. В таком случае, может ли сущность operator<<()
находиться внутри тела struct S
?
?