Предположим, что у меня есть переменная-член std::vector<std::string>
в классе, и я хочу вернуть ее из функции-члена в качестве неизменяемого представления, используя комбинацию gsl::array_view
и gsl::cstring_view
. К сожалению, следующий не компилируется:gsl :: array_view <const gsl :: cstring_view <>> from std :: vector <std::string>
class C {
public:
gsl::array_view<const gsl::cstring_view<>> getVectorOfStrings() const
{
return _vectorOfStrings;
}
private:
std::vector<std::string> _vectorOfStrings;
};
Причиной этого является то, что нет контейнер cstring_view
что array_view
может быть создан из. Поэтому мой вопрос: есть ли способ использовать такую конструкцию, явно не добавляя что-то вроде члена типа std::vector<gsl::cstring_view<>>
, что явно нежелательно?
Редактировать
Мне кажется, что такие «трансформирующие» взгляды могут быть более общего пользования. Рассмотрите наличие vector
владеющих указателей, таких как std::vector<std::shared_ptr<T>>
, которые я хотел бы предоставить пользователю класса в виде array_view
необработанных указателей: gsl::array_view<const T*>
без раскрытия моего подхода к реализации, определенного для реализации. Мысли?
С этим теоретическим 'array_view'' cstring_view ', которому принадлежит коллекция' cstring_view ', существование которой требуется из существования' array_view' 'cstring_view's? – jaggedSpire
@jaggedSpire Ну, это именно то, что я сказал в последнем абзаце моего вопроса. Но, возможно, есть способ какой-то лениво-оценкой 'array_view', который будет конвертировать любое значение' string_view'-compatible-array в 'string_view' по запросу. Возможно, я мог бы написать такое, но я подумал, что, возможно, есть лучший способ. Таким образом, этот вопрос: – Rostislav
ах. Если вы хотите обратиться к коллекции, не имеющей права собственности, которая может быть легко конвертируемой в 'cstring_view's, могу ли я спросить, почему избегается' array_view' 'std :: strings'? – jaggedSpire