根据我的理解,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
是否允许此低级别访问?
答案 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之后不会写入字符串流。