簡體   English   中英

運算符重載<< for enum to ostringstream

[英]operator overloading << for enum to ostringstream

我有以下宏。

#define STRING_STREAM( data )       \
    ( ( (std::ostringstream&)       \
        ( std::ostringstream( ).seekp( 0, std::ios_base::cur ) << data ) ).str( ) )

我試圖重寫<<為枚舉:

std::ostringstream& operator<<( std::ostringstream& oStrStream, TestEnum& testEnum )
{
    oStrStream << "TestEnum";
    return oStrStream;
}

當我調用STRING_STREAM(testEnum)時,它不使用重載的<<。 它打印枚舉數值。

std::ostream& operator<<( std::ostream& oStrStream, const TestEnum testEnum )
{
    oStrStream << "TestEnum";
    return oStrStream;
}

問題是重載的<<運算符期待一個參數..

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM