0

列挙型の演算子 ">>" をオーバーロードしました:

#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)

演算子は、空の文字列を除くすべての値に対して機能します。オペレーターから返される入力ストリームは、最初から同じストリームです。

そのような問題に対する許容可能なアプローチは何ですか? ありがとう!

4

1 に答える 1