(如何)我可以使用带有c字符串(char指针)的Boost字符串算法库?

Mar*_* Ba 7 c++ string boost pointers cstring

是否有可能以某种方式调整c风格的字符串/缓冲区(char*wchar_t*)以使用Boost字符串算法库

也就是说,例如,它的trim算法具有以下声明:

template<typename SequenceT> 
void trim(SequenceT &, const std::locale & = std::locale());
Run Code Online (Sandbox Code Playgroud)

并且实现(查找trim_left_if)要求序列类型具有成员函数erase.

我怎么能用原始字符指针/ c字符串缓冲区?

char* pStr = getSomeCString(); // example, could also be something like wchar_t buf[256];
...
boost::trim(pStr); // HOW?
Run Code Online (Sandbox Code Playgroud)

理想情况下,算法可以直接在提供的缓冲区上工作.(尽可能.如果算法需要在"字符串"中分配额外的空间,它显然无法工作.)


@Vitaly问道:为什么你不能从char缓冲区创建一个std :: string然后在算法中使用它?

我有char*的原因是我想在我们现有的代码库上使用一些algorthims.将所有char缓冲区重构为字符串将比其值更多的工作,并且在更改或调整某些内容时,能够将给定算法应用于恰好存在于当前代码中的任何c样式字符串将是一件好事.

使用字符串意味着(a)将char*复制到字符串,(b)将算法应用于字符串,以及(c)将字符串复制回char缓冲区.

jpa*_*cek 5

对于SequenceT-type操作,您可能必须使用std::string.如果你想自己实现它,你必须满足更多的创建,破坏,价值语义等要求.你基本上最终会实现你的实现std::string.

RangeT型的操作可能是,但是,在使用char*使用S iterator_range从Boost.Range库.不过,我没试过.