使用一个stringstream函数参数接受多个类型

时间:2013-05-22 10:20:49

标签: c++

我需要为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");

  4. 那么为什么它不能动态转换为wstringstream(作为转换构造函数)

2 个答案:

答案 0 :(得分:1)

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

  2. 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;
};