Bạn có thể tự định nghĩa toán tử +
sao cho bạn có thể thêm hai biến số boost::filesystem::path
.
inline boost::filesystem::path operator+(boost::filesystem::path left, boost::filesystem::path right){return boost::filesystem::path(left)+=right;}
Sau đó, bạn thậm chí có thể thêm biến số std::string
(chuyển đổi ẩn). Đây là giống với định nghĩa của operator/
từ
bao gồm/tăng/hệ thống tập tin/path.hpp:
inline path operator/(const path& lhs, const path& rhs) { return path(lhs) /= rhs; }
Dưới đây là một ví dụ làm việc:
main.cpp:
#include <iostream>
#include <string>
#include <boost/filesystem.hpp>
using namespace boost::filesystem;
inline path operator+(path left, path right){return path(left)+=right;}
int main() {
path p1 = "/base/path";
path p2 = "/add/this";
std::string extension=".ext";
std::cout << p1+p2+extension << '\n';
return 0;
}
biên soạn với
g++ main.cpp -lboost_system -lboost_filesystem
sản xuất đầu ra:
$ ./a.out
"/base/path/add/this.ext"
Tôi không chắc chắn nếu điều này là tốt hơn so với những gì tôi hiện đang làm nhưng tôi sẽ chấp nhận nó anyway. – Zack
@Zack: Nó rất gần với những gì bạn có. Tôi đã bắt đầu với API 1.42, nhận thấy nhận xét của bạn về câu trả lời khác về 1,35 và đã làm việc ngược lại để có được điều này. Tuy nhiên, điều này dễ kiểm tra hơn, ví dụ: nếu p.leaf() == "." (vì p == "/ some/dir /"). –