[英]C++ - inherting std::tuple from something adding virtual functions to it
[英]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.