我需要为cout
这样的错误编写实现自己的流类。这里我要做的是创建一个单独的类并重载<<
运算符以接受任何基本数据类型。
简单的想法就是休闲。但这个程序没有编译。
错误
error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'const wchar_t [20]' (or there is no acceptable conversion)
#include <iostream>
#include <string>
#include <sstream>
class ErrorWriter
{
public:
std::wstringstream& ErrorWriter::operator<<(std::wstringstream& ss){
//write to file
//write to console
return ss;
}
};
int main(){
ErrorWriter eout;
eout << L"this is first error";
eout << L"\nThis second error" << 1 << 2.5 << true;
}
所以我的问题
cout
,stringstream
如何实现此 wstringstream可以由wchar_t
std::wstringstream ss(L"this is first error");
那么为什么它不能动态转换为wstringstream(作为转换构造函数)
答案 0 :(得分:1)
不要认为有任何明显的方法可以做到这一点。
basic_stringstream
构造函数声明为explicit
- 因此转换不会自动发生。
答案 1 :(得分:1)
如果您的目标只是让一个可以接受任意参数的编写器(使用std :: ostream进行转换),那么这样的东西就可以了。
class ErrorWriter
{
public:
// Omit constructor and file_log initialization
template<typename T>
ErrorWriter& operator<<(const T& item) {
file_log << item;
std::cout << item;
return *this;
}
private:
std::ofstream file_log;
};