有可能以某种方式调整c风格的字符串/缓冲区(char *或wchar_t *)来使用
Boost String Algorithms Library吗?
也就是说,例如,它的trimalgorithm有以下声明:
template<typename SequenceT> void trim(SequenceT &,const std::locale & = std::locale());
和the implementation(查找trim_left_if)要求序列类型具有成员函数erase.
我怎么能用原始字符指针/ c字符串缓冲区?
char* pStr = getSomeCString(); // example,could also be something like wchar_t buf[256]; ... boost::trim(pStr); // HOW?
理想情况下,算法可以直接在提供的缓冲区上工作. (尽可能.如果算法需要在“字符串”中分配额外的空间,它显然无法工作.)
@Vitaly问道:为什么你不能从char缓冲区创建一个std :: string然后在算法中使用它?
我有char *的原因是我想在我们现有的代码库上使用一些algorthims.将所有char缓冲区重构为字符串将比其值更多的工作,并且当更改或调整某些内容时,能够将给定算法应用于恰好存在于当前代码中的任何c样式字符串将是很好的.
使用字符串意味着(a)将char *复制到字符串,(b)将算法应用于字符串,以及(c)将字符串复制回char缓冲区.
解决方法
对于SequenceT类型的操作,您可能必须使用std :: string.如果你想自己实现它,你必须满足更多的创建,破坏,值语义等要求.你基本上最终会得到std :: string的实现.
但是,RangeT类型的操作可以使用Boost.Range库中的iterator_range
在char *上使用.不过,我没试过.