我有以下宏。
#define STRING_STREAM( data ) \
( ( (std::ostringstream&) \
( std::ostringstream( ).seekp( 0, std::ios_base::cur ) << data ) ).str( ) )
我正在尝试重载&lt;&lt;对于枚举:
std::ostringstream& operator<<( std::ostringstream& oStrStream, TestEnum& testEnum )
{
oStrStream << "TestEnum";
return oStrStream;
}
当我调用STRING_STREAM(testEnum)时,它不使用重载的&lt;&lt;。它打印枚举数值。
答案 0 :(得分:2)
std::ostream& operator<<( std::ostream& oStrStream, const TestEnum testEnum )
{
oStrStream << "TestEnum";
return oStrStream;
}
答案 1 :(得分:0)
问题在于重载&lt;&lt;运营商期待论证..
new ostringstream()
但是你给它的论点..
ostringstream()
这是不与重载函数匹配。
在我的例子中,我使用auto_ptr在ostringstream超出范围后自动解除分配。这允许我们使用宏来执行我们的功能而不会发生内存泄漏。
#include<sstream>
#include<iostream>
#define STRING_STREAM( data ) \
((ostringstream&)( *( auto_ptr<ostringstream>(new ostringstream()) ) << data)).str()
using namespace std;
enum TestEnum { ALPHA, BETA };
ostringstream& operator<<( ostringstream& oss, TestEnum testEnum ){
oss << "TestEnum";
return oss;
}
int main(){
cout << STRING_STREAM( ALPHA ) << endl;
}