[英]C++ string of a specific length
我正在嘗試編寫一個具有“序列號”概念的函數。 它有特定的長度。 我希望通過創建一個稱為SerialNumber的新類型來簡化構造函數,該類型將這個13字節數字的概念包裝起來。 例如,我不希望使用Product(const char * m)或Product(const std :: string&str)來截斷該值並違反直覺。 我寧願總是可以指望正確長度的Product(const SerialNumber&sn)。 最好的方法是什么? 應該為char [13]使用typedef還是用字符串類來做到這一點?
最簡單的方法是創建一個接受std :: string的構造函數,然后在構造函數中驗證長度確實為13。如果不是,則簡單地引發一個異常-這就是它們存在的原因。 請記住,char [13]不能保證字符串的長度為13個字符,畢竟它可以是“ hi”,后跟11個空終止符。
我不確定您的情況,但一種選擇仍然是使用std :: string,但是例如,如果字符串的長度錯誤,則Product
的構造方法將拋出該錯誤。 否則,最簡單的方法似乎是std::string
的包裝SerialNumber
類(或char[14]
,但是我很猶豫在C ++代碼中使用C字符串)。
我將使用typedef char [13]或圍繞char [13]的包裝類。 由於chars表與char *相同,因此您可以根據需要輕松地將其轉換為std :: string。
我會做類似下面的事情
struct SerialNumber {
static bool TryCreate(const std::string& data, std::auto_ptr<SerialNumber>& ptr) {
if (data.length() != 13) {
ptr.reset();
return false;
} else {
ptr.reset(new SerialNumber(data.c_str()));
return true;
}
}
private:
SerialNumber(const char* data) {
memcpy(m_data, data, sizeof(data));
}
char m_data[13];
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.