boost. как передать в phoenix::construct константу?
От: nocomentsspb Россия  
Дата: 27.08.10 08:52
Оценка:
Изучаю свежий spirit. Ни как не получается в правиле проинициализировать конструктор с заданным параметром.
Вот пример.
    enum MorphemeType {
        PREFIX, 
        ROOT,
        SUFFIX,
        ENDING
    };

    struct Morpheme
    {
        MorphemeType type;
        std::string value;

        Morpheme(MorphemeType t, const std::string & v) : type(t), value(v) {};
                Morpheme(const std::string & v) : value(v) {};
        Morpheme() {};
    };

    BOOST_FUSION_ADAPT_STRUCT(
        client::Morpheme,
        (client::MorphemeType, type)
        (std::string, value)
    )


В правиле делаю так.

 word [qi::_val = phoenix::construct<typename client::Morpheme>(phoenix::val(MorphemeType::ROOT),  qi::_1)]


Не компилится. Компилятор пишет

c:\app\boost_1_44_0\boost_1_44_0\boost\spirit\home\support\container.hpp(101): error C2146: синтаксическая ошибка: отсутствие "," перед идентификатором "value_type"
1>c:\app\boost_1_44_0\boost_1_44_0\boost\spirit\home\support\container.hpp(101): error C2065: value_type: необъявленный идентификатор
1>c:\app\boost_1_44_0\boost_1_44_0\boost\spirit\home\support\container.hpp(102): error C2955: boost::spirit::traits::detail::remove_value_const: для использования класса шаблон требуется список аргументов шаблон


Если делать конструктор только от строки
phoenix::construct<typename client::Morpheme>(qi::_1)

То всё замечательно работает.

Никак не могу понять почему. У кого какие идеи?
Спасибо.
boost spirit
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.