这个问题似乎是一个非常常见的问题,但我无法找到解决方案。而且我几乎确信这样的功能应该是boost或其他流行库的一部分。
我希望有一个std :: string的替代品,我可以指定最小和最大长度,最好是在编译时。可选地,它还可以支持没有字符串设置的状态(以boost::optional
方式)。像这样:
ranged_string<min, max> str;
分配无效值时,应抛出异常。
自己创建这样的实用程序应该不是很难(只是一些重载和异常抛出),但我不想重新发明轮子。
答案 0 :(得分:0)
最好的做法是扩展(或换行)string
并重载(或保护通过换行)所有会减损或添加到字符串进行边界检查的操作。我很好奇,范围强制字符串的用途是什么?
编辑:但这不会在编译时。
答案 1 :(得分:-1)
我相信您可以使用allocator
插入自定义basic_string
,当它超出范围或缩小到范围以外时,可以抛出异常。
typedef std::basic_string<char, std::char_traits<char>, ranged_allocator<char, min, max> > ranged_string;
ranged_allocator<char, min, max>::allocate(size_type)
将继续增加一个计数器
ranged_allocator<char, min, max>::deallocate(size_type)
将继续递减计数器
如果计数器超出范围
,则两者都会抛出