Я создаю unindent алгоритм для текстового редактора. Я сумел получить диапазон для работы, но когда я хочу сделать Gtk :: TextBuffer :: сотрите, это не удается:Создание unindent алгоритма с использованием boost :: range
void unindentSelection(const Glib::RefPtr<Gtk::TextBuffer> &buffer)
{
Gtk::TextBuffer::iterator start, end;
buffer->get_selection_bounds(start, end);
auto selRange = boost::make_iterator_range(start, end);
auto buffRange = boost::make_iterator_range(buffer->begin(), buffer->end());
auto prevRangeRev = boost::make_iterator_range(buffRange.begin(), selRange.begin()) | boost::adaptors::reversed;
auto prevRangeLineRev = boost::find<boost::return_begin_found>(prevRangeRev, '\n');
auto prevRangeLine = prevRangeLineRev | boost::adaptors::reversed;
auto afterRange = boost::make_iterator_range(selRange.end(), buffRange.end());
auto afterRangeLine = boost::find<boost::return_begin_found>(afterRange, '\n');
auto exSelRangeAux = boost::join(prevRangeLine, selRange);
auto exSelRange = boost::join(exSelRangeAux, afterRangeLine);
show_range(exSelRange);
while (true)
{
auto spaceRange = boost::find_if<boost::return_begin_found>(exSelRange, findNonspaceNL);
if (boost::distance(spaceRange))
{
buffer->erase(spaceRange.begin(), spaceRange.end());
}
}
}
TextEditor.cpp: 501: 31: ошибка: нет жизнеспособного преобразования from 'boost :: range_detail :: join_iterator>, Gtk :: TextIter, unsigned int, unsigned int, boost :: iterators :: bidirectional_traversal_tag>, Gtk :: TextIter, unsigned int, unsigned int, boost :: iterators :: bidirectional_traversal_tag> 'to' const iterator '(aka' const Gtk :: TextIter ') buffer-> erase (spaceRange.begin(), afterRangeLine.end()); ^ ~~~~~~~~~~~~~~~~~ /usr/include/gtkmm-3.0/gtkmm/textiter.h:145:7: note: конструктор-кандидат (неявный конструктор копирования), а не жизнеспособный: неизвестное преобразование из 'boost :: range_detail :: join_iterator>, Gtk :: TextIter, unsigned int, unsigned int, boost :: iterators :: bidirectional_traversal_tag>, Gtk :: TextIter, unsigned int, unsigned int, boost :: итераторы :: bidirectional_traversal_tag> 'to' const Gtk :: TextIter & 'для 1-го аргумента класс TextIter ^ /usr/include/gtkmm-3.0/gtkmm/textiter.h:145:7: note: конструктор-кандидат (неявный move constructor) не является жизнеспособным: неизвестное преобразование из 'boost :: range_detail :: join_iterator>, Gtk :: TextIter, unsigned int, unsigned int, boost :: iterators :: bidirectional_traversal_tag>, Gtk :: TextIter, unsigned int, unsigned int , boost :: iterators :: bidirectional_traver sal_tag>»на 'Gtk :: TextIter & &' для 1-го класса аргумент TextIter ^ /usr/include/gtkmm-3.0/gtkmm/textbuffer.h:378:34: примечание: передача аргумента параметр 'RANGE_BEGIN' здесь итератор erase (const iterator & range_begin, const iterator & range_end);
Любые идеи?