Tôi đang cố gắng để thực hiện riêng QDebug() phong cách dòng debug-đầu ra của tôi, điều này về cơ bản là những gì tôi có cho đến nay:QDebug() << stuff; thêm một dòng mới tự động?
struct debug
{
#if defined(DEBUG)
template<typename T>
std::ostream& operator<<(T const& a) const
{
std::cout << a;
return std::cout;
}
#else
template<typename T>
debug const& operator<<(T const&) const
{
return *this;
}
/* must handle manipulators (endl) separately:
* manipulators are functions that take a stream& as argument and return a
* stream&
*/
debug const& operator<<(std::ostream& (*manip)(std::ostream&)) const
{
// do nothing with the manipulator
return *this;
}
#endif
};
sử dụng tiêu biểu:
debug() << "stuff" << "more stuff" << std::endl;
Nhưng tôi muốn không phải thêm std :: endl;
Câu hỏi của tôi là về cơ bản, làm thế nào tôi có thể nói khi kiểu trả về của nhà điều hành < < sẽ không được sử dụng bởi nhà điều hành khác < < (và do đó thêm endl)? Cách duy nhất tôi có thể nghĩ đến để đạt được bất kỳ thứ gì như thế này là tạo danh sách các thứ cần in với liên kết với từng đối tượng tạm thời được tạo bởi debug(), sau đó in mọi thứ, cùng với dấu mới (và I có thể làm những thứ thông minh như chèn dấu cách) trong ~ debug(), nhưng rõ ràng đây không phải là lý tưởng vì tôi không đảm bảo rằng đối tượng tạm thời sẽ bị hủy cho đến khi kết thúc phạm vi (hay tôi?).
'qDebug()' chỉ tạo đối tượng tạm thời. Thực hiện theo các biểu tượng và bạn sẽ tìm thấy một cái gì đó như thế này: 'QDebug qDebug() {return QDebug (QtDebugMsg); } '. –