(Как) я могу использовать библиотеку алгоритмов строки Boost со строками c (указатели символов)?

Можно ли каким-то образом адаптировать строку / буфер в стиле c ( char * или wchar_t * ) для работы с Библиотекой алгоритмов Boost String ?

То есть, например, его алгоритм trim имеет следующее объявление:

template 
void trim(SequenceT &, const std::locale & = std::locale());

и реализация (ищите trim_left_if ) требует, чтобы тип последовательности имел функцию-член erase .

Как я могу использовать это с буфером необработанного символьного указателя / c строки?

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

В идеале алгоритмы должны работать непосредственно с предоставленным буфером. (Насколько это возможно. Очевидно, это не сработает, если алгоритму нужно выделить дополнительное пространство в «строке».)


@Vitaly спрашивает: почему вы не можете создать std :: строка из буфера символов, а затем использовать ее в алгоритмах?

Причина, по которой у меня вообще есть char *, заключается в том, что я хотел бы использовать несколько алгоритмов в нашей существующей кодовой базе. Реорганизация всех буферов символов в строку потребует больше усилий, чем она того стоит, и при изменении или адаптации чего-либо было бы неплохо просто иметь возможность применить данный алгоритм к любой строке c-стиля, которая находится в текущем коде.

Использование строки означало бы (а) скопировать char * в строку, (b) применить алгоритм к строке и (c) скопировать строку обратно в буфер символов.

7
задан casperOne 7 September 2012 в 19:29
поделиться