Можно добавлять несколько путей подряд с помощью оператора /
:
std::filesystem::path p1{"A"};
auto p2 = p1 / "B" / "C";
что довольно удобно. Однако concat предлагает только +=
:
std::filesystem::path p1{"A"};
auto p2 = p1 / "B" / "C" + ".d"; // NOT OK
Это довольно раздражает, так как я не могу легко добавлять расширения в конец своих путей. У меня нет выбора, кроме как написать что-то вроде
std::filesystem::path p1{"A"};
auto p2 = p1 / "B" / "C";
p2 += ".d";
Я что-то упускаю? Есть ли причина такого несоответствия?
const char[N]
, это было быauto p2 = p1 / "B" / (std::string("C") + ".d");
- person PeterT   schedule 27.01.2021("C" + ".d")
добавляет дваconst char[2]
- person Caleth   schedule 27.01.2021"A"+"B"
- person PeterT   schedule 27.01.2021"C"
, скорее всего, также будетstd::filesystem::path
, поэтому второй вариант не сработает. Первый странный, но должен работать. :) - person Touloudou   schedule 27.01.2021auto p2 = p1 / "B" / "C" += ".d";
илиauto p2 = p1 / "B" / (std::string() + "C" + ".d");
:D . Оба они работают в godbolt.note that in practice, "C" will most likely
На практике нет, в любом случае результатp1 / "B" / "C"
имеет типstd::filesystem::path
, поэтому он делает с ним+=
. Тем не менее, это не ответ, так как я не знаю причины этого несоответствия. - person KamilCuk   schedule 27.01.2021+=
для rvalue есть stackoverflow.com/questions/65461889/ . Вызовpath()
поможет ((path(a) += b)
), если объект внутри является lvalue. - person user202729   schedule 27.01.2021