【问题标题】:Generic function to convert c++11 enum to underlying type or if not enum return itself将 c++11 枚举转换为基础类型的通用函数,如果不是枚举,则返回自身
【发布时间】:2014-09-26 15:09:34
【问题描述】:

正如标题所说,需要这个,因为我将值序列化为 std::ostringstream 并且不希望重载运算符

【问题讨论】:

    标签: c++11 enums type-conversion


    【解决方案1】:

    你可以这样做:

    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 数组。解决此问题的一种方法是让非枚举案例返回对传入参数的引用,但是当“相同”函数在某些情况下返回值而在其他情况下返回引用时,您必须小心。

    【讨论】:

      猜你喜欢
      • 2023-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 1970-01-01
      • 2010-10-11
      相关资源
      最近更新 更多