Оба string_ref в boost и string_span в GSL не определяют конструктор, который принимает пару итераторов. В чем причина этого решения?Почему конструктор string_view не принимает пару итераторов
Обычно это не имеет большого значения, я могу просто создать string_ref так:
boost::string_ref s(start, std::distance(start, finish));
, но причина, почему я хочу конструктор, взять пару итераторов, потому что у меня есть код, который выглядит следующим образом:
template<typename Type, typename Iterator>
void func(const Iterator& begin, const Iterator& end)
{
Type s(begin, end);
//do stuff with s
}
в настоящее время я могу назвать это так:
func<std::string>(start, finish)
Я хочу изменить это:
func<boost::string_ref>(start, finish) //compile error
, но этот код не будет компилироваться, потому что отсутствие конструктора принимает пару итераторов в string_ref
Я предполагаю, что ваши итераторы на самом деле 'std :: string :: iterator'? Потому что 'string_ref' ссылается на существующую строку, поэтому вы не можете ее создать из-под воздуха. – MSalters
@MSalters На самом деле, мой итератор уже «boost :: string_ref :: iterator' :). –
Стоит прочитать чат об этом, было сделано в будущей группе предложений std: https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/6X6_IjfzdYI, стоит прочитать. – Dam