В моей программе я хотел бы манипулировать элементами boost :: filesystem :: path вектора в цикле for.
typedef vector<fs::path> path_vec;
path_vec pv;
for (auto it = pv.cbegin(), end = pv.cend(); it != end; ++it)
Что я хотел бы сделать, это добавить строку в конецпути.
Если я делаю так, он работает нормально:
stringstream image_file_0001;
image_file_0001 << it->string() << "/x_alpha0001.png";
p1 = image_file_0001.str();
Если я так делаю, он тоже работает нормально:
string a = it->string();
string b = a.append("/prx");
Но если я попытаюсь сделать это в одну строку
string c = it->string().append("/prx");
или
string d = (it->string()).append("/prx");
, это выдаст ошибки компиляции:
7 перегрузок не имеют легального преобразованиядля указателя 'this'
Я думаю, это должно быть мое отсутствие знаний о том, как использовать указатели, или это как-то связано с функцией boost :: filesystem :: path .string ()?
Хорошо, я хотел бы создать каталог с "/prx"
, добавленным к пути origianl в *it
. Могу ли я сделать это в одну строку?
boost::filesystem::createdirectory ( something here );
Проблема, по-моему, в том, что я не понимаю, почему .append () изменит исходную строку.Разве это не функция, которая возвращает другую строку, которую я могу свободно использовать, просто читая исходную строку?