Tôi nghĩ lý do cho điều này là tương tự như std::stringstream
, trong bối cảnh mà bạn cũng nên sử dụng .str()
để chuyển đổi dòng để chuỗi và tương tự cho boost::formatter
và lý do là như sau:
std::string s1 = "Hello ", s2 = "World";
format("%s.") % s1 + s2;
Bây giờ nếu boost::formatter
là chuyển đổi hoàn toàn thành std::string
sau đó nó tạo ra "Hello .World", bởi vì format("%s.") % s1
sẽ được chuyển thành "Hello". và sau đó nó sẽ được chuyển đổi hoàn toàn thành std::string
và sử dụng operator+
để thêm nó với s2
, nhưng có lẽ hầu hết các lập trình viên đều muốn có "Hello World". và đó sẽ là nguồn gây nhầm lẫn. Nhưng trong trường hợp đó không có chuyển đổi ngầm tồn tại biên dịch sẽ tạo ra lỗi này (vì không có operator+
cho boost::formatter
và std::string
) và để bạn có thể sửa chữa nó hoặc là format("%s.") % (s1 + s2)
hoặc str(format("%s.") % s1) + s2
Không phải là quá tải của% đủ không? :) – jrok
Tôi không chắc bạn đang tìm kiếm loại câu trả lời nào ở đây. Bạn có hỏi liệu có bất kỳ vấn đề ngữ nghĩa nào ngăn không cho Boost thực hiện một điều như vậy không? Hay bạn chỉ nói, "Họ nên làm theo cách này." –
Tôi đang cố gắng hiểu các vấn đề ngữ nghĩa. Tôi thường nghĩ rằng các thư viện tăng cường được thiết kế tốt. –