簡體   English   中英

特定長度的C ++字符串

[英]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.

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