我正在为文本编辑器创建一个不缩进算法。我设法获得了要操作的范围,但是当我想做 Gtk::TextBuffer::erase 时,它失败了:
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: 错误: 从 '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:注意:候选构造函数(隐式复制构造函数)不可行:没有从 '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>
有任何想法吗?