【发布时间】:2014-09-26 15:09:34
【问题描述】:
正如标题所说,需要这个,因为我将值序列化为 std::ostringstream 并且不希望重载运算符
【问题讨论】:
标签: c++11 enums type-conversion
正如标题所说,需要这个,因为我将值序列化为 std::ostringstream 并且不希望重载运算符
【问题讨论】:
标签: c++11 enums type-conversion
你可以这样做:
template<typename E, typename = typename std::enable_if<std::is_enum<E>::value>::type>
typename std::underlying_type<E>::type
underlyer(E e)
{ return static_cast<typename std::underlying_type<E>::type>(e); }
template<typename E, typename = typename std::enable_if<!std::is_enum<E>::value>::type>
E
underlyer(E const& e)
{ return e; }
注意:这并不适用于所有情况;例如,如果您尝试underlyer("Hello, world"),它将失败,因为您无法按值返回 C 数组。解决此问题的一种方法是让非枚举案例返回对传入参数的引用,但是当“相同”函数在某些情况下返回值而在其他情况下返回引用时,您必须小心。
【讨论】: