我有一个功能,看起来像这样:凡StateE定义是否可以将非枚举值作为枚举函数参数传递?
std::string SomeClass::convertStateToString(StateE state) const
{
std::string stateAsString;
switch (state)
{
case UNKNOWN:
stateAsString = "UNKNOWN";
break;
case OFFLINE:
stateAsString = "OFFLINE";
break;
case ENABLED:
stateAsString = "ENABLED";
break;
case DISABLED:
stateAsString = "DISABLED";
break;
default:
stateAsString = "ABNORMAL";
break;
}
return stateAsString;
}
为:
typedef enum
{
UNKNOWN = 0,
OFFLINE = 1,
ENABLED = 2,
DISABLED = 3
} StateE;
为单元测试的目的,我想一些不好的数据提供给convertStateToString
并验证我得到"ABNORMAL"
背部。这可能吗?
换句话说,是否有可能将一个超出枚举范围的值作为参数内函数传递给函数的签名表示该参数属于枚举类型的函数?
经过指针和reinterpret_cast
的实验后,我几乎可以声称功能convertStateToString
不能在任何情况下返回"ABNORMAL"
。
没有任何方法太冒昧!
接缝像你想强类型枚举:http://www.cprogramming.com/c++11/ C++ 11-nullptr-strong-typed-enum-class.html – NathanOliver 2015-03-13 14:26:23