5

私が理解していることから、 astd::stringstreamは内部的に としてではstd::stringなく、std::stringインスタンスのセットとして表されます。(私が間違っている場合は修正してください)。

として表されたデータがあり、データを char の配列の配列として期待するstd::stringstreamC 関数 (OpenCL から) に渡したいと考えています。clCreateProgramWithSource( const char**).

最初に文字列ストリームのコンテンツ全体を保持する単一の文字列を作成せずにこれを行う方法はありますか?たとえば、次の方法があります:

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

編集

フォローアップの質問:

これが不可能な場合、この低レベルのアクセスを許可する、std::stringstreamから継承した に代わるものはありますか?std::ostream

4

1 に答える 1

1

stringstream の streambuf を取得することで、使用するバッファを明示的に設定できます。

#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 に注意してください。clCreateProgramWithSource を呼び出した後、文字列ストリームに書き込まないことを OpenCL に約束します。

于 2020-06-26T12:21:56.477 に答える