是否可以将非枚举值作为枚举函数参数传递
Is it possible to pass a non-enum value as an enum function parameter?
>我有一个看起来像这样的函数:
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;
}
其中 State E 定义为:
typedef enum
{
UNKNOWN = 0,
OFFLINE = 1,
ENABLED = 2,
DISABLED = 3
} StateE;
出于单元测试的目的,我想将一些错误数据提供给convertStateToString
并验证我是否得到"ABNORMAL"
。这可能吗?
范围之外的值作为参数内传递给函数,其中函数的签名表明参数是枚举类型?
在尝试了指针和reinterpret_cast
之后,我几乎准备好声称函数convertStateToString
在任何情况下都不能返回"ABNORMAL"
。
没有方法太黑客了!
你可以在单元测试中写这个:
convertStateToString(static_cast<StateE>(10));
这将强制您的代码传入开关/机箱的"默认值"。
无论C++尝试以多少种方式强制执行正确的类型检查,应该仍然可以只获取内存位置的地址并更改其内容。例如:声明一个 StateE 类型的变量,获取其地址,在其中写入一个超出范围的值,然后将其传递给函数。可能变量应该是易失性的。
我没有看到问题:
std::string convertStateToString(StateE state);
int main() {
std::cout << convertStateToString(StateE(30)) << "n";
}
输出:
ABNORMAL
相关文章:
- C++中构造函数中的枚举
- 是否有 Windows 用户空间函数来枚举连接的网络共享?
- 如何使用默认值为构造函数中的枚举赋值?
- 泛型枚举和其他类型的重载模板函数
- 在运行时使用枚举器值作为模板函数的模板参数的元程序
- 函数-本地枚举声明和 ADL 的交互
- 如何从枚举类值中指定模板函数参数中的数组大小?
- 是否可以使用泛型枚举类型作为函数的参数?
- 枚举模板函数一般调用
- 为什么C++不为枚举类型提供默认"operator>>"函数?
- 从枚举中选择适当的函数
- 如何为返回枚举元组的 C++ 函数编写 cython 包装器?
- 如何将带有"any"枚举的 std::map 传递给函数
- 将函数参数限制为某些枚举值
- C++ 成员函数的多个定义,基于枚举模板参数
- 类中的枚举在调用自己的函数时不会改变
- 将全球枚举的全局枚举更改为函数中的int值
- 枚举值依赖函数调用
- 是否可以将非枚举值作为枚举函数参数传递
- C++中的枚举 - 函数如何分配值