列挙型の演算子 ">>" をオーバーロードしました:
#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(): 字句キャストが正しくありません: ソース型の値をターゲットとして解釈できませんでした
lexical_cast_39.hpp (1155) から例外がスローされます。
if (interpreter >> result)
演算子は、空の文字列を除くすべての値に対して機能します。オペレーターから返される入力ストリームは、最初から同じストリームです。
そのような問題に対する許容可能なアプローチは何ですか? ありがとう!