Как обернуть простой буфер символов с помощью std::string или его эквивалента? ⇐ C++
Как обернуть простой буфер символов с помощью std::string или его эквивалента?
Мотивация:
Я использую некоторую библиотеку (которую я не контролирую) со следующей функцией:
char* foo(/*здесь некоторые параметры */); Который возвращает очень длинную строку с нулевым завершением. Теперь я хочу использовать эту функцию
void bar(const std::string& s); который доступен в другой библиотеке, которую я использую (то есть я не контролирую сигнатуры ни одной из этих функций). Я хочу передать результат foo() в bar(), не копируя его.
Вопрос:
Я хочу обернуть непрерывный буфер символов строковым объектом, чтобы его можно было передать как const std::string&. Как мне это сделать?
Примечания:
[*]Я понимаю, что это может не понравиться, но я все равно хотел бы это сделать, если это возможно. [*]Да, это может быть неуместно, или некрасиво, или слишком C-подобно, но это то, что мне (думаю, мне) нужно сделать. [*]Комментарии к ответам предполагают, что наследование std::string не является вариантом, поскольку у него нет соответствующих виртуальных методов. По сути, нам приходится предполагать некоторые вещи о реализации (или писать разный код для разных реализаций) и «создавать вручную» экземпляр std::string. Таким образом, вопрос, похоже, в том, как это сделать.
Мотивация:
Я использую некоторую библиотеку (которую я не контролирую) со следующей функцией:
char* foo(/*здесь некоторые параметры */); Который возвращает очень длинную строку с нулевым завершением. Теперь я хочу использовать эту функцию
void bar(const std::string& s); который доступен в другой библиотеке, которую я использую (то есть я не контролирую сигнатуры ни одной из этих функций). Я хочу передать результат foo() в bar(), не копируя его.
Вопрос:
Я хочу обернуть непрерывный буфер символов строковым объектом, чтобы его можно было передать как const std::string&. Как мне это сделать?
Примечания:
[*]Я понимаю, что это может не понравиться, но я все равно хотел бы это сделать, если это возможно. [*]Да, это может быть неуместно, или некрасиво, или слишком C-подобно, но это то, что мне (думаю, мне) нужно сделать. [*]Комментарии к ответам предполагают, что наследование std::string не является вариантом, поскольку у него нет соответствующих виртуальных методов. По сути, нам приходится предполагать некоторые вещи о реализации (или писать разный код для разных реализаций) и «создавать вручную» экземпляр std::string. Таким образом, вопрос, похоже, в том, как это сделать.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Std: Переместите std :: string из std :: deque then std :: deque :: pop_front?
Anonymous » » в форуме C++ - 0 Ответы
- 65 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Std: Переместите std :: string из std :: deque then std :: deque :: pop_front?
Anonymous » » в форуме C++ - 0 Ответы
- 32 Просмотры
-
Последнее сообщение Anonymous
-