【发布时间】:2014-08-17 13:48:18
【问题描述】:
我为枚举重载了运算符“>>”:
#include <iostream>
#include <boost/lexical_cast.hpp>
using namespace std;
enum MyEnum
{
ONE = 0,
TWO,
TREE,
MAX
};
const char* MyEnumString[MAX] =
{
"ONE"
,"TWO"
,"THREE"
};
istream& operator>>(istream& is, MyEnum& myEnum)
{
string value;
is >> value;
myEnum = ONE;
for (int i=0; i < MAX; i++)
{
if (!value.compare(MyEnumString[i]))
{
myEnum = static_cast<MyEnum>(i);
return is;
}
}
return is;
}
int main()
{
cout << "Hello World" << endl;
boost::lexical_cast<MyEnum>(""); //Throws exception.
return 0;
}
我得到的输出:
你好世界 在抛出一个实例后调用终止 'boost::exception_detail::clone_impl
' what(): bad lexical cast: 源类型值不能被解释为目标
从 lexical_cast_39.hpp (1155) 抛出异常:
if (interpreter >> result)
该运算符适用于除空字符串之外的每个值。从运算符返回的输入流与一开始的输入流相同。
对于此类问题,可接受的方法是什么? 谢谢!
【问题讨论】:
标签: c++ operator-overloading lexical-cast