Насколько я понимаю, std::stringstream
внутренне представлен не как std::string
, а скорее как набор экземпляров std::string
. (поправьте меня, если я ошибаюсь).
У меня есть данные, представленные как std::stringstream
, и я хочу передать их функции C (clCreateProgramWithSource
из OpenCL), которая ожидает данные в виде массива массивов символов. (const char**)
.
Есть ли способ сделать это без предварительного создания одной строки, содержащей все содержимое потока строк, например, следующим образом:
std::string tmp1 = my_stringstream.str();
const char* tmp2 = tmp1.c_str();
const char** tmp3 = &tmp2;
ИЗМЕНИТЬ
Дополнительный вопрос:
Если это не возможно, есть ли альтернатива std::stringstream
, унаследованная от std::ostream
, которая разрешает этот низкоуровневый доступ?
stringstream
не указана. Для C++ внутренний объектstreambuf
был бы полезной низкоуровневой точкой доступа, но для взаимодействия C ваш код в основном настолько хорош, насколько это возможно. - person Kerrek SB   schedule 19.01.2013stringstream
. С откатом к приведенному выше коду в других случаях. - person Joel   schedule 19.01.2013ostream
илиstreambuf
для реализации собственного потока, если объединение и разделение потока на самом деле является узким местом. (stackoverflow.com/questions/6490499/) - person Lol4t0   schedule 19.01.2013clCreateProgramWithSource
. Это как снять муху со слона и надеяться, что он похудеет. - person Bo Persson   schedule 19.01.2013clCreateProgramWithSource
. На самом деле, я протестировал создание промежуточного кода LLVM напрямую вместо генерации и компиляции кода с помощью Clang, только чтобы понять, что разницы в производительности практически нет. И моя реализация OpenCL использует Clang/LLVM afaik. Но меня все еще интересует преобразованиеstd::stringstream
вchar**
для взаимодействия C++/C в целом. - person Joel   schedule 19.01.2013stream.str().c_str()
- person Tomáš Zato - Reinstate Monica   schedule 18.03.2013