据我所知,
我有一个作为
是否有一种方法可以实现这一点,而不必先创建一个包含 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 :: ostream
并允许这种低级别的访问,而不是使用std::stringstream
?
stringstream
的实现未指定。对于 C++,内部的streambuf
对象是一个有用的低级访问点,但对于 C 互操作性,您的代码基本上已经足够好了。 - Kerrek SBostream
或streambuf
派生出自己的流来实现回退。 (https://dev59.com/tljUa4cB1Zd3GeqPTac6) - Lol4t0clCreateProgramWithSource
相比,复制一个字符串的成本可以说是 微不足道 的。这就像从一只大象身上拔掉一只苍蝇,希望它会减轻体重一样。 - Bo PerssonclCreateProgramWithSource
中的开销确实存在。事实上,我已经测试过直接构建LLVM中间代码而不是使用Clang进行代码生成和编译,只发现性能几乎没有任何差异。而我的OpenCL实现使用的是Clang/LLVM afaik。但我仍然对C++/C互操作中的std::stringstream
到char**
转换感兴趣。 - Joelstream.str().c_str()
。 - Tomáš Zato