1. 问题

前阵子遇到个问题,需要传递接口的admin状态,是这么定义的:

1
2
3
4
5
enum IfaceAdminStatus
{
up,
down
};

然后从API上获取的接口又是string类型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct EtherIfaces
{
std::string ifaceName;
std::string adminState;

EtherIfaces(const std::string &ifaceName_,
const std::string &adminState_):
ifaceName(ifaceName_),
adminState(adminState_)
{
}

EtherIfaces()
{
}

~EtherIfaces()
{
}
};

所以需要将string转enum处理。因为是C++小白,只能去论坛里找办法,然后再Stack Overflow上找到这个办法:

https://stackoverflow.com/questions/7163069/c-string-to-enum

2. 例子

记录下简单的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
#include <boost/assign.hpp>

using namespace std;
using namespace boost;
enum IfaceAdminStatus
{
up,
down,
unknown
};

map<string, IfaceAdminStatus> adminStatus = assign::map_list_of("up", up)("down", down)("unknown", unknown);

int main()
{
string status = "up";
cout << adminStatus[status] << endl;
return 0;
}

输出:

1
2
3
(base) phoenine@EvandeMacBook-Pro C_Study_1 % g++ -std=c++17 cpp_chapter_7.cpp -o test -I /opt/homebrew/Cellar/boost/1.75.0_1/include/
(base) phoenine@EvandeMacBook-Pro C_Study_1 % ./test
0