提供相同的ostream和wostream流操作符的任何快捷方式?

时间:2014-09-17 14:58:21

标签: c++ stl googletest visual-c++-2013

我想提供ostream<<和wostream<<一个类的运算符,除了一个是宽流而另一个不是。

是否有一些技巧可以做到这一点,而不仅仅是复制粘贴并进行必要的调整?

供参考,这是必要的,因为我们使用wostream作为标准,但是当没有提供ostream<<时,Google-test的EXPECT_PRED3编译失败,即使其他宏很乐意使用ostreamwostream

我的实际代码如下:

class MyClass
{
...
public:
  friend std::wostream& operator<<(std::wostream& s, const MyClass& o)
  {
    ...
  }
};

1 个答案:

答案 0 :(得分:5)

std::ostreamstd::wostream只是模板类std::basic_ostream的特化。写一个模板operator <<将解决你的问题。这是一个例子:

struct X { int i; };

template <typename Char, typename Traits>
std::basic_ostream<Char, Traits> & operator << (std::basic_ostream<Char, Traits> & out, X const & x)
{
    return out << "This is X: " << x.i << std::endl;
}

正如评论中所指出的,你可以更进一步,通过暴露某些类似流的界面的任何类来参数化你的operator <<

template <typename OStream>
OStream & operator << (OStream & out, X const & x)
{
    return out << "This is X: " << x.i << std::endl;
}