将字符串长度限制在特定范围内

时间:2013-05-20 10:13:10

标签: c++ string limit

这个问题似乎是一个非常常见的问题,但我无法找到解决方案。而且我几乎确信这样的功能应该是boost或其他流行库的一部分。

我希望有一个std :: string的替代品,我可以指定最小和最大长度,最好是在编译时。可选地,它还可以支持没有字符串设置的状态(以boost::optional方式)。像这样:

ranged_string<min, max> str;

分配无效值时,应抛出异常。

自己创建这样的实用程序应该不是很难(只是一些重载和异常抛出),但我不想重新发明轮子。

2 个答案:

答案 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)将继续递减计数器

如果计数器超出范围

,则两者都会抛出