Mr.*_*Boy 3 c++ stl googletest visual-c++-2013
我想为一个类提供ostream <<和wostream <<运算符,除了一个是宽流而另一个不是.
有没有一些技巧可以做到这一点,而不仅仅是复制粘贴和进行必要的调整?
作为参考,这是必要的,因为我们使用wostream作为标准,但是当没有ostream<<提供时,Google-test的EXPECT_PRED3无法编译,即使其他宏愉快地使用ostream或wostream.
我的实际代码如下所示:
class MyClass
{
...
public:
friend std::wostream& operator<<(std::wostream& s, const MyClass& o)
{
...
}
};
Run Code Online (Sandbox Code Playgroud)
std::ostream并且std::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;
}
Run Code Online (Sandbox Code Playgroud)
正如评论中所指出的,你可以更进一步,operator <<通过暴露某些类似流的接口的任何类来参数化你的:
template <typename OStream>
OStream & operator << (OStream & out, X const & x)
{
return out << "This is X: " << x.i << std::endl;
}
Run Code Online (Sandbox Code Playgroud)