0

我需要实现自己的流类来编写错误,例如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;
}

所以我的问题

  1. 如何使用一个函数参数接受所有基本类型参​​数(我不需要为每种数据类型编写多个操作重载器)。
  2. 其他流怎么样coutstringstream 实现这个
  3. wstringstream 可以由wchar_t

    std::wstringstream ss(L"this is first error");

那么为什么它不能即时转换为 wstringstream(作为转换构造函数)

4

2 回答 2

1
  1. 不要认为有任何明显的方法可以做到这一点。

  2. 声明了采用字符串的basic_stringstream构造函数explicit- 因此转换不会自动发生。

于 2013-05-22T10:25:19.547 回答
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;
};
于 2013-05-22T12:25:47.573 回答