我试图编写一个具有“序列号”概念的函数。它有一个特定的长度。我希望通过创建一个名为SerialNumber的新类型来简化构造函数,该类型包装了这个13字节数的概念。例如,我不想要一个产品(const char * m)或产品(const std :: string & str),它会截断这个值并且是违反直觉的。它更喜欢产品(const SerialNumber & sn),我可以始终指望它是正确的长度。什么是最好的方法来做到这一点?它应该是char [13]的typedef,还是有一种方法可以与字符串类一起使用?特定长度的C++字符串
1
A
回答
4
最简单的方法是创建它接受一个的std :: string构造函数,然后你的构造函数中验证长度确实是13.如果不是的话,简单地抛出一个异常 - 这就是为什么它们的存在。请记住,char [13]不能保证字符串的长度为13个字符,毕竟它可以是“hi”,后面是11个空终止符。
1
我不确定您的情况,但有一个选项仍然使用std :: string,但例如Product
的构造函数会在字符串长度错误时抛出。否则,最简单的方法似乎是std::string
(或char[14]
,但我犹豫在C++代码中使用C字符串)的包装SerialNumber
类。
0
我会使用typedef char [13]或围绕char [13]的包装类。由于字符表与char *相同,因此如果需要,您将很容易将其转换为std :: string。
0
我会做类似下面
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];
};
相关问题
- 1. C#检查特定长度的数字字符串
- 2. RegEX字符串到特定长度
- 3. C字符串长度
- 4. 在MySQL中查询特定长度的字符串字段
- 5. 获取C++中字符串的长度
- 6. C#编辑字符串以添加特定长度的换行符
- 7. C字符串比定义长度短一个字符?
- 8. C#:如何获得字符串中的字符串的长度[]
- 9. 在特定长度中自动换行符字符串
- 10. C++字符串替换字符串的任意长度
- 11. 子串的特定字符后不同长度的
- 12. 字符串的固定长度排列
- 13. 将可变长度字符串分配给固定长度字符串
- 14. 从给定的字符串给定长度的字符的差异字符串
- 15. mongoexport导出特定的字符串长度?
- 16. 如何删除特定长度的字符串
- 17. 从字符串中生成特定长度的所有变体
- 18. 如何从NSArray获得特定长度的字符串?
- 19. 从innerHTML获取未知长度的特定字符串
- 20. 将字符串拆分为特定长度的组
- 21. Sailsjs模型中特定长度的字符串
- 22. jQuery - 检测字符串中的特定长度单词?
- 23. 获得长字符串中的特定子字符串
- 24. C#可变长度字符串数组
- 25. C++字符串长度检查
- 26. c#字符串长度事件
- 27. C++ - 限制字符串长度
- 28. C#编组动态长度字符串
- 29. C++ while循环和字符串长度
- 30. unicode字符串的长度
仿佛异常感觉太“永久”,你可以用它你可以在以后关闭断言的替代品。 – 2011-04-06 20:39:49