簡體   English   中英

在 C++ 中向 std::string 添加函數

[英]Adding functions to std::string in c++

我只是想念c++標准庫字符串類中的一些函數,所以我只想自己添加這些。 我寫了這個:

#include <string>


class String : public std::string
{
public:
    // some new fancy functions
};

后來通過閱讀一些論壇注意到,從標准庫中繼承 std::string 和任何其他容器是一個壞主意。

我只想要普通的字符串,但是有了我自己編寫的附加功能,我該如何以正確的方式實現這一點? 或者有沒有辦法做對,我必須糾正我自己的字符串類?

首先 - std::string有點亂,而且有太多的方法。 將功能集中到一個類中是糟糕的設計,該類不需要在該類中,並且可以使用更簡單、更基本的類方法輕松實現——作為一個獨立的函數。

此外 - std::string同時難以操作(它不是字符串緩沖區或std::stringstream ),並且並非不可能操作,即不是不可變的。

但是回到我之前的觀點:“正確的方法”——如果有的話——做你想做的事情是使用獨立的功能。 例如,假設您想隨機排列std::string的內容。 好吧,要么:

std::string& jumble(std::string& str)

或者

std::string jumble(std::string str)

或者,如果你想感覺很酷和微優化,

std::string jumble(const std::string& str)
std::string jumble(std::string&& str)

取決於您是想將字符串更多地用作不可變實體還是可變實體。

還要記住,我們真的沒有一個std::string類——我們有一個基於字符類型的模板(和一個分配器等),所以如果你想通用,你必須接受這個類:

template<
    class CharT,
    class Traits = std::char_traits<CharT>,
    class Allocator = std::allocator<CharT>
> class basic_string;

PS - 如果我們有統一的調用語法,就像Bjarne 提出的- 我們真的應該恕我直言 - 你的獨立函數可以簡單地被調用,就好像它們是成員一樣:

auto jumbled = my_string.jumble();

暫無
暫無

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

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