这个问题似乎是一个非常普遍的问题,但我无法找到解决方案。而且我几乎确信像这样的功能应该是 boost 或其他流行库的一部分。
我想直接替换 std::string ,我可以为其指定最小和最大长度,最好是在编译时。可选地,它还可以支持没有字符串集的状态(以某种boost::optional
方式)。像这样的东西:
ranged_string<min, max> str;
分配无效值时,应抛出异常。
自己创建这样的实用程序应该不是很难(只是一些重载和异常抛出),但我不想重新发明轮子。
string
扩展(或包装)和重载(或通过包装保护)所有会减损或添加到字符串以进行边界检查的操作可能是您最好的选择。不过我很好奇,范围强制字符串有什么用?
编辑:虽然这不会在编译时。
我相信你可以插入你的自定义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)
将继续递减计数器
如果计数器超出范围,两者都会抛出