簡體   English   中英

C ++函數重載,使fwrite / fread的行為類似於PHP版本

[英]c++ function overloading, making fwrite/fread act like PHP versions

我習慣了PHP fwrite / fread參數的順序,並且我也想使它們在C ++中相同。

我希望它可以處理char和string類型,以及我放入的任何數據類型(僅在定義了長度的情況下)。

我對C ++完全陌生,這是我到目前為止所做的: 編輯:修復了std :: string&buf

size_t fwrite(FILE *fp, const std::string &buf, const size_t len = SIZE_MAX){
    if(len == SIZE_MAX){
        return fwrite(buf.c_str(), 1, buf.length(), fp);
    }else{
        return fwrite(buf.c_str(), 1, len, fp);
    }
}

size_t fwrite(FILE *fp, const void *buf, const size_t len = SIZE_MAX){
    if(len == SIZE_MAX){
        return fwrite((const char *)buf, 1, strlen((const char *)buf), fp);
    }else{
        return fwrite(buf, 1, len, fp);
    }
}

這個工作應該很好嗎? 如果我想以絕對最佳的方式做到這一點,該怎么辦?

如果要以最佳方式寫入文件,則應使用std :: iostreams。 手動處理緩沖區的長度是解決問題的方法。

另外,頂部重載應采用const std :: string&,而不是const std :: string。

但是,我看不到任何實際的錯誤。

fwrite / fread在對象上不能很好地工作; 因此,如@DeadMG所說,最好使用流。

就像是:

cout << str << endl;

這是一種更加面向對象的處理方式-您可以使對象內的運算符超載,以處理每個單個對象的不同要求。

這不是IMO函數的正確重載。 如果有的話,這些函數應該是對象內的方法。

暫無
暫無

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

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