特定长度的c++字符串
C++ string of a specific length
我正试图编写一个具有"序列号"概念的函数。它有一个特定的长度。我希望通过创建一个名为SerialNumber的新类型来简化构造函数,该类型包装了13字节数的概念。例如,我不想要一个Product(const char* m)或Product(const std::string&Str),它将截断值并违反直觉。它更喜欢Product(const SerialNumber&我总能指望它是正确的长度。最好的方法是什么?它应该为char[13]定义一个类型定义,还是有一种方法可以用字符串类做到这一点?
最简单的方法是创建一个接受std::string的构造函数,然后在构造函数中验证长度是否确实为13。如果不是,只需抛出一个异常——这就是它们存在的原因。请记住,char[13]不能保证字符串长度为13个字符,毕竟它可以是"hi",后面跟着11个空终止符。
我不确定您的情况,但一种选择是仍然使用std::string,但例如Product
的构造函数会抛出,如果字符串是错误的长度。否则,最简单的方法似乎是std::string
(或char[14]
)的包装SerialNumber
类,但我犹豫在c++代码中使用C-string)。
我将使用typedef char[13]或在char[13]周围使用包装类。由于字符表与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];
};