在没有内存分配的情况下将std :: stringstream转换为const char **

时间:2013-01-19 11:55:31

标签: c++ opencl std stringstream

根据我的理解,std::stringstream在内部表示为std::string,而不是std::string个实例。 (如果我错了,请纠正我。)

我将数据表示为std::stringstream,我想将其传递给C函数(来自OpenCL的clCreateProgramWithSource),该函数期望数据为字符数组的数组。 (const char**)

有没有办法做到这一点没有首先创建一个包含stringstream整个内容的字符串,例如以下列方式:

std::string tmp1 = my_stringstream.str();
const char* tmp2 = tmp1.c_str();
const char** tmp3 = &tmp2;

修改

后续问题:

如果 ,那么std::stringstream是否继承std::ostream是否允许此低级别访问?

1 个答案:

答案 0 :(得分:1)

通过获取字符串流的流缓冲,我们可以显式设置它应使用的缓冲区:

#include <sstream>

constexpr size_t buffer_size = 512;

void dummy_clCreateProgramWithSource(const char **strings) {}

int main () {
  char * ss_buffer = new char[buffer_size];
  std::stringstream filestr; // TODO initialize from file
  filestr.rdbuf()->pubsetbuf(ss_buffer,buffer_size);
  const char** extra_indirection = const_cast<const char **>(&ss_buffer);
  dummy_clCreateProgramWithSource(extra_indirection);
  return 0;
}

注意const_cast告诉你什么可能是谎言;我们承诺OpenCL在调用clCreateProgramWithSource之后不会写入字符串流。