我有几个类似于下面的嵌套枚举。我想要将isValid()
函数定义为尽可能接近enum
定义。实际的代码更加冗长,嵌套的命名空间和结构多层次。关于嵌套枚举的C++操作
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
的内部?
我不确定这里出现了什么问题。只需使'isValid()'函数'static',并更改'legalValue()'函数来执行'return S :: isValid(e);',我认为这应该编译... – 2012-01-03 15:41:18
这个想法是'legalValue()'应该适用于任何具有关联'isValid()'函数的'enum'。它不适用于嵌套'class'或'struct'的枚举。 –
paperjam
2012-01-03 15:43:20
尝试将枚举放入命名空间中,而不是结构。这样,ADL应该踢(我没有测试过),你应该能够调用isValid无论在声明枚举的名称空间。 – paercebal 2012-01-03 15:44:54