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
|