Феникс-функция семантического действия не компилируется
Я хочу разобрать строку и убедиться, что она в нижнем регистре.
Это должно быть сделано на этом этапе, потому что дух строит дерево из всего этого.
так что у меня есть это правило
struct to_lower_object
{
typedef char result_type;
char operator()(char a) const
{
return std::tolower(a);
}
};
int main()
{
boost::phoenix::function<to_lower_object> lazy_lower;
qi::rule<std::string::iterator, char() >
lower_char=(qi::char_-":")
[
qi::_val=lazy_lower(qi::_1);
];
qi::rule<std::string::iterator, std::string() >
lower_string =
+lower_char;
:::
проблема в том, что он не компилируется, ошибка также огромна, слишком большая для публикации.
Спасибо
РЕДАКТИРОВАТЬ: я исправил перегрузку оператора, это было мое плохо, но проблема сохраняется. Я верю * это связано с заполнителями
РЕДАКТИРОВАТЬ 2: Я разделил проблему, чтобы убедиться, что он работает на символе, а не серии из них, но он по-прежнему не работает с той же кучей ошибок.
2 ответа
Ну, после долгих мучений, я наконец-то заработал.
Это:
struct to_lower_object
{
typedef char result_type;
char operator()(char a) const
{
return std::tolower(a);
}
};
Должно было:
struct to_lower_object
{
template<typename Arg>
struct result{
typedef char type;
};
template<typename Arg>
char operator()(Arg arg1) const
{
return std::tolower(a);
}
};
Супер. По-видимому, это потому, что я читал некоторые старые документы.
Я уверен, что линия qi::rule<std::string::iterator, std::string() >
никогда не скомпилируется. Ты имел ввиду qi::rule<std::string::iterator, std::string >
?