【发布时间】:2012-08-04 18:30:38
【问题描述】:
您能帮我找出以下代码中的问题吗 (代码类似C++ stream as a parameter when overloading operator<<):
#include <iostream>
#include <string>
class logger
{
public:
void init( std::ostream& ostr )
{
stream = &ostr;
}
template< typename t >
logger& operator <<( t& data )
{
*stream << data;
return *this;
}
logger& operator <<( std::ostream& (*manip)(std::ostream &) )
{
manip( *stream );
return *this;
}
logger& operator <<( std::ios_base& (*manip)(std::ios_base&) )
{
manip( *stream );
return *this;
}
private:
std::ostream* stream;
};
int main( int argc, char* argv[] )
{
logger log;
log.init( std::cout );
log << "Hello" << std::endl;
//log << std::string( "world" ) << std::endl;
return 0;
}
在我取消注释包含“世界”的行之前,一切正常。在这种情况下,GCC 产生 错误:'operator 不匹配
有趣的是VS2008对这段代码没有任何问题。
谢谢!
【问题讨论】:
-
Visual Studio 做了很多其他编译器不会做的类型转换。试试 std::string("world").c_str();