我为枚举重载了运算符“>>”:
#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 的实例后调用 Hello World 终止
' what(): bad lexical cast: 源类型值不能被解释为目标
从 lexical_cast_39.hpp (1155) 抛出异常:
if (interpreter >> result)
该运算符适用于除空字符串之外的每个值。从运算符返回的输入流与一开始的流相同。
这种问题的可接受方法是什么?谢谢!