Tôi đã tạo đối tượng giống như std::cout
giống như viết cả std::cout
và vào tệp nhật ký.Cách chính xác để khai báo/xác định đối tượng cout tùy chỉnh giống như
Tôi hiện đang xác định nó như thế này trong tệp tiêu đề, nhưng tôi nhận được cảnh báo biến không sử dụng.
tập tin header <MyLib/Log.h>
static LOut { };
static LOut lo;
template<typename T> inline LOut& operator<<(LOut& mLOut, const T& mValue)
{
std::string str{toStr(mValue)};
std::cout << str;
getLogStream() << str;
return mLOut;
}
Cách sử dụng:
#include <MyLib/Log.h>
...
lo << "hello!" << std::endl;
nên lo
được static
? Nên lo
là extern
?
Các yêu cầu để giải thích đúng cách khai báo đối tượng giống như cout
và hiển thị cách triển khai thư viện chuẩn chính thực hiện.
Chỉnh sửa: bởi cout
giống như đối tượng, tôi có nghĩa là biến toàn cục luôn có sẵn sau khi bao gồm tiêu đề tương ứng.
'std :: cout' thường chỉ là một' std :: ostream' của một số loại, với một số đặc biệt logic để đảm bảo rằng nó được khởi tạo sớm, và không bao giờ bị phá hủy; ít nhất một trình biên dịch tôi biết sử dụng các phần mở rộng đặc biệt để đạt được điều này. Nhưng bạn thường không cần nó; nếu tồi tệ hơn đến tồi tệ hơn, bạn có thể sử dụng một singleton, và viết 'log() << ...'. –