我想要有一個std::string
like class(比如說,string_n
),這樣string_n
的對象不能超過N
個字符。如何限制長度std :: string?
N
可以在編譯時指定。嘗試創建較大長度的string_n
可能會斷言或拋出異常。
一個選項類似於但是它會錯過所有漂亮的成員功能std::string
提供。
template <size_t N>
class string_n {
char char_[N + 1];
};
另一種選擇是推出一個新的類,如下所示。
template <size_t N>
class string_n {
public:
// constructor and assignment operators with length check
~string_n() = default;
// for readers
const string& get() const;
private:
std::string string_;
};
這將需要大量的樣板代碼。
我有一種感覺,可能會有更好的方法。你會建議什麼?
我建議重做'的std :: string'的接口。主要原因是通過使用'std :: string',你將失去沒有分配的好處,固定大小的字符串給你。 – SergeyA
@SergeyA:'std :: string :: reserve' ...好吧,這是一個而不是零,但來吧:P –
@阿倫我不知道你的意思是樣板代碼...如果你想「所有由std :: string提供的好成員函數「,那麼你將不得不重新實現它們或者擴展字符串,並重載每個可能增加字符串大小的成員函數,檢查它是否超出了你指定的限制。 –