运算符重载<<用于enum到ostringstream

时间:2012-05-18 20:07:50

标签: c++ enums overloading ostringstream

我有以下宏。

#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;。它打印枚举数值。

2 个答案:

答案 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;
}