调用enum<<字符串组合的运算符

时间:2015-06-24 11:40:54

标签: c++ c++11 operators

假设我们将枚举实现operator<<枚举值转换为字符串。是否可以在字符串构造期间调用此运算符或类似的东西?我当前的方法使用std::stringstream调用&lt;&lt;枚举和从std::stringstream中提取字符串。还有其他方法吗?使用std::cout <<不是一种选择。

示例代码:

enum class Status {
    OK,
    ERROR
}

::std::ostream& operator<<(::std::ostream& os, Status status)
{
    switch (status) {
        case Status::OK:
            return os << "OK";
        case Status::ERROR:
            return os << "ERROR";
}

用法:

Status s = Status::OK;
std::stringstream stream;
stream << s;
std::string statusString = s.str().c_str();

1 个答案:

答案 0 :(得分:0)

不幸的是,这里没有任何优雅的解决方案。

如果我们只能这样做,我们可能会使用用户定义的转换,但它需要是一个非静态成员函数,enums是不可能的。

但您可能总是使用与参数相关的查找,就像使用operator<<一样。

或者,如果你想要字符串,制作一张地图并在那里放置所需的字符串。