所以这里有一个有趣的问题,我如何为 cout 制作一些类似于 wrapper 的东西?我希望能够将它添加到 dll 中,以便我可以将其放入我的程序中。但它的基本语法应该是
Mything::mesage << "I'm some text" << im_an_int << someclass << mything::endl;
或者
Mything::mesageandlog << "I'm going to print to console, and to a file!" << mything::endl;
我可以处理大部分内部逻辑,但至于我应该做些什么。有点难过。
可能在我的类中创建一个名为 message 的静态流成员,然后在它也被写入时触发一个事件以通过方法运行它?
Idk,我环顾四周,发现了类似的东西,但至于将其放入 dll 中,我不知所措。(如何为 cout 编写一个允许表达语法的函数包装器?)因为这需要我使用 extern 和一个变量,但是我如何使它成为静态的,这样我就可以直接调用它而不创建变量?
澄清一点,像这样:mydll.h
#include <iostream>
namespace mynamespace {
extern struct LogMessage{};
template <typename T>
LogMessage& operator<< (LogMessage &s, const T &x) {
SetStdHandle(STD_OUTPUT_HANDLE, GetStdHandle(STD_OUTPUT_HANDLE));
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE);
std::cout << "[IF] ";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_WHITE);
//LogTimestamp(); --ill impliment this.
std::cout << x << endl;
//writeStreamToLogfile(s); --and ill handle this.
return s;
}
}
驱动程序.h
#include <mydll.h>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
mynamespace::LogMessage << "Something: << std::endl;
}
预期输出:
"[IF] [00:00:00] Something