GVKun编程网logo

C++11中如何输出enum class的值(c++ enum class用法)

17

关于C++11中如何输出enumclass的值和c++enumclass用法的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Ajax得到的Json数据在Js中如何输出Object的值、C#

关于C++11中如何输出enum class的值c++ enum class用法的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Ajax得到的Json数据 在Js中如何输出Object的值、C#Class同时是IEnumerable和IEnumerator.这有什么问题?、c++11 enum class用法、c++11 强类型枚举 enum class等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

C++11中如何输出enum class的值(c++ enum class用法)

C++11中如何输出enum class的值(c++ enum class用法)

Unlike an unscoped enumeration, a scoped enumeration is not implicitly convertible to its integer value. You need to explicitly convert it to an integer using a cast:

std::cout << static_cast<std::underlying_type<A>::type>(a) << std::endl;
You may want to encapsulate the logic into a function template:

template <typename Enumeration>
auto as_integer(Enumeration const value)
-> typename std::underlying_type<Enumeration>::type
{
return static_cast<typename std::underlying_type<Enumeration>::type>(value);
}
used as:

std::cout << as_integer(a) << std::endl;

 

示例:

头文件:enum.h

 1 #include <iostream>
 2 
 3 namespace myenum {
 4   // 一般的枚举
 5   enum PieceType {
 6     PieceTypeKing, PieceTypeQueen, PieceTypeRook, PieceTypePawn
 7   };
 8 
 9   // 设置了值得枚举
10   enum PieceTypeAnother {
11     PieceTypeKingA=1, PieceTypeQueenA, PieceTypeRookA=10, PieceTypePawnA
12   };
13   // 强类型的枚举
14   enum class MyEnum {
15     EnumValue1,
16       EnumValue2 = 10,
17       EnumValue3
18       };
19   // 改变了类型的强类型枚举
20   enum class MyEnumLong : unsigned long {
21     EnumValueLong1,
22       EnumValueLong2 = 10,
23       EnumValueLong3
24       };
25 
26   template<typename T> std::ostream& operator<<(typename std::enable_if<std::is_enum<T>::value, std::ostream>::type& stream, const T& e) {
27     return stream << static_cast<typename std::underlying_type<T>::type>(e);
28   }
29 }

main函数:main.cpp

 1 #include "enum.h"
 2 int main() {
 3 
 4   std::cout << "test enum" << std::endl;
 5   std::cout << "一般的枚举" << myenum::PieceType::PieceTypeKing << std::endl;
 6   std::cout << "设置了值的枚举" << myenum::PieceTypeAnother::PieceTypeQueenA << std::endl;
 7   std::cout << "强类型的枚举" << myenum::MyEnum::EnumValue3 << std::endl;
 8   std::cout << "改变了类型的强类型枚举" << myenum::MyEnumLong::EnumValueLong1 << std::endl;
 9 
10   std::cout << "end of this program" << std::endl;
11 }

重写了之后,就不用再对强类型的进行强转了,呵呵

编译的时候要加上c++11的选项:

1 g++ main.cpp  -std=c++11

 

Ajax得到的Json数据 在Js中如何输出Object的值

Ajax得到的Json数据 在Js中如何输出Object的值

解决

一个 object 对象,格式一般是这样的:{key:value,key2:value,key3:value}

● 输出object的的某个值:alert (object.key)

● 查看object:console.log(object)

● 输出一个 object 对象,需要把 object 类型 转换成 string 类型

ext.js
Ext.encode(object);
JSON2.js
JSON2.stringify(object)

问题

前端HTML

<a onclick="user_stop(this,''<s:property value="#user.id"/>'')" href="javascript:;" title="启用">
    <i class="layui-icon">&#xe601;</i>
</a>

前端JS

直接alert(data)或alert(success)会输出Object object或空值;
获取json对象中的数据使用键值对方式,Object.key
function user_stop(obj, id) {
    layer.confirm(''确认要更改用户状态吗?'', function(index) {
        $.post(//action的地址
            "${pageContext.request.contextPath}/UserAction_changeUserState",
            //提交的数据
            {"id":id},
            //回调函数
            function(data){
                //获取后台返回的的数据进行判断,修改前端样式
                //data.key获取json数据对象的值
                if(data.success==1){
                    $(obj).attr(''title'', ''启用'')
                    $(obj).find(''i'').html(''&#xe601;'');
                    $(obj).parents("tr").find(".td-status").find(''span'').removeClass(''layui-btn-disabled'').html(''已启用'');
                    layer.msg(''已启用!'', {
                        icon : 6,
                        time : 1000
                    });
                } else {
                    $(obj).attr(''title'', ''停用'')
                    $(obj).find(''i'').html(''&#xe62f;'');
                    $(obj).parents("tr").find(".td-status").find(''span'').addClass(''layui-btn-disabled'').html(''已停用'');
                    layer.msg(''已停用!'',{
                        icon : 5,
                        time : 1000
                    });
                }
            },
            //数据格式
            "json"
        )
    });
}   

后端Action

public String changeUserState() throws Exception {
    Integer success = userService.changeUserState(userid);//传递一个Integer类型的对象,0或1到前端进行判断
    ServletActionContext.getResponse().getWriter().write("{\"success\":" + success + "}");
    return null;
}

 

C#Class同时是IEnumerable和IEnumerator.这有什么问题?

C#Class同时是IEnumerable和IEnumerator.这有什么问题?

我有一个名为GenericPermutations的类,它既是可枚举的又是枚举器.它的工作是获取一个有序的对象列表,并按顺序迭代它们的每个排列.

例如,此类的整数实现可以迭代以下内容:

GenericPermutations<int> p = new GenericPermutations<int>({ 1,2,3 });
p.nextPermutation(); // 123
p.nextPermutation(); // 132
p.nextPermutation(); // 213
// etc.

所以它的可枚举性就是它包含了你可以枚举的事物的“列表”.它也是一个普查员,因为它的工作涉及寻找下一个排列.

问题:我目前正在尝试将IEnumerator和IEnumerable与这个类集成,在我看来它应该是两者(而不是使用子类作为IEnumerable).到目前为止,我已经避免了通过在GetEnumerator方法中传递新的GenericPermutation对象来尝试从中获取两个枚举器的问题.

这是一个坏主意吗?还有什么我应该考虑的吗?

解决方法

通过使用IEnumerable和IEnumerator的通用版本减少您的混淆(?).

可枚举的排列是IEnumerable< IEnumerable< T>>.所以你可能有类似的东西

IEnumerable<IEnumerable<T>> GetPermutations(IEnumerable<T> sequence)
{
    return new Permuter<T>(sequence);
}

public class Permuter<T> : IEnumerable<IEnumerable<T>> { ... }

此外,我已经看到不止一种情况,其中单个类型实现了IEnumerable< T>和IEnumerator< T&gt ;;它的GetEnumerator方法只是返回这个; 我认为这样的类型需要是一个结构,因为如果它是一个类,如果你在第一个枚举完成之前第二次调用GetEnumerator(),你就会遇到各种各样的问题. 编辑:消费permuter

var permuter = GetPermutations(sequence);
foreach (var permutation in permuter)
{
    foreach (var item in permutation)
        Console.Write(item + "; ");
    Console.WriteLine();
}

假设输入序列是{1,3},则输出为

1; 2; 3; 
1; 3; 2; 
2; 1; 3; 
2; 3; 1; 
3; 1; 2; 
3; 2; 1;

编辑:

这是一个超低效的实现来说明这个建议:

public class Permuter<T> : IEnumerable<IEnumerable<T>>
{
    private readonly IEnumerable<T> _sequence;

    public Permuter(IEnumerable<T> sequence)
    {
        _sequence = sequence;
    }

    public IEnumerator<IEnumerable<T>> GetEnumerator()
    {
        foreach(var item in _sequence)
        {
            var remaining = _sequence.Except(Enumerable.Repeat(item,1));
            foreach (var permutation in new Permuter<T>(remaining))
                yield return Enumerable.Repeat(item,1).Concat(permutation);
        }
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

c++11 enum class用法

c++11 enum class用法

 

 


使用过的一个enum class的用法:
enum class EModel : int
    {
        Model1,

        Model2,

        Model3,

        Other = 4,
    };


    
    EModel SRiverGetTorqueModelType(const int  typeCount)
    {
        switch (typeCount)
        {
        case 0:
            return EModel::Model1;
            break;
        case 1:
            return EModel::Model3;
            break;
        case 2:
            return EModel::Model2;
            break;
        default:
            return EModel::Model1;
        }

    }

int typeCount = xxx;    
if (EModel::Model1 == SRiverGetTorqueModelType(typeCount))
{
}


 

c++11 强类型枚举 enum class

c++11 强类型枚举 enum class

在标准 C++ 中,枚举类型不是类型安全的。枚举类型被视为整数,这使得两种不同的枚举类型之间可以进行比较。C++03 唯一提供的安全机制是一个整数或一个枚举型值不能隐式转换到另一个枚举别型。 此外,枚举所使用整数类型及其大小都由实现方法定义,皆无法明确指定。 最后,枚举的名称全数暴露于一般范围中,因此 C++03 两个不同的枚举,不可以有相同的枚举名。
(好比 enum Side { Right, Left}; 和 enum Thing { Wrong, Right }; 不能一起使用。)

C++11 引进了一种特别的 "枚举类",可以避免上述的问题。使用 enum class 的语法来声明:
enum class Enumeration{ Val1, Val2, Val3 = 100, Val4 /* = 101 */,};
此种枚举为类型安全的。枚举类型不能隐式地转换为整数;也无法与整数数值做比较。 (表示式 Enumeration::Val4 == 101 会触发编译期错误)。

#include <iostream>
using namespace std;

enum class Enumeration1
{
    Val1, // 0
    Val2, // 1
    Val3 = 100,
    Val4 /* = 101 */
};

 

// 指定类型
enum class Enumeration2:long {val1,val2=100,val3}; //val2=100.000400 出错

int main(int argc, char** argv)
{
    Enumeration1 my=Enumeration1::Val3;
    cout<<static_cast<int>(my)<<endl;

    cout<<static_cast<double>(Enumeration2::val2)<<endl;
    return 0;
}

 

今天的关于C++11中如何输出enum class的值c++ enum class用法的分享已经结束,谢谢您的关注,如果想了解更多关于Ajax得到的Json数据 在Js中如何输出Object的值、C#Class同时是IEnumerable和IEnumerator.这有什么问题?、c++11 enum class用法、c++11 强类型枚举 enum class的相关知识,请在本站进行查询。

本文标签: