2016-06-30 14 views
2

私はSDLの関数を使用していますが、パラメータの1つはconst GLchar* const*なので、呼び出すには渡す必要がありますこのようなC-文字列の参照:C++ std :: stringをPointer-to-C-Stringに渡すパラメータ

const char *str = "test"; 
glShaderSource(... , &str, ...); 

しかし、私は私が渡したいstd::stringを持っており、このような何かをやってもエラーを与える:

std::string str = "test"; 
glShaderSource(... , &str.c_str(), ...); 

私はことを知っています新しいconst char*変数を作成してstd::stringを好きなだけ保存することができますe:

const char *cstr = str.c_str(); 

しかし、これを回避する方法はありますか?私は新しい変数を作る必要はありません。私はラムダを使ってみましたが、うまくいきませんでした。

+0

おっと、それは嘘です。 –

答えて

5

いいえ、周囲はありません。何

(それはあなたが1 以上 C-文字列を渡したいので)文字バッファへのポインタへのポインタを必要とglShaderSource機能、そしてあなたは、右辺値のアドレスを取ることができません(式str.c_str()は)。

しかし、これは実際問題ではありません。最後の例では、ポインタをポインタに割り当てるだけです。これは非常に安く簡単です。

「新しい変数を作成する」ことを恐れることはありません。—名前を付けるのはとにかく便利です。

+0

さて、ありがとう! –

0

私は質問があると思います:なぜ関数にポインタへのポインタが必要ですか? Cスタイルの関数を持つ多くのケースでは、ターゲットポインタが他のもの(関数によって内部的に生成されたものなど)を指すように修正するため、この種のインターフェイスを提供します。その場合、string::c_str()の結果を変数に代入して渡すことは無意味です。なぜなら、何とか他のものを指すように再割り当てされるからです。

この機能のドキュメントをより完全にチェックして、これが当てはまらないようにすることをお勧めします。

+0

質問から:_ "パラメータの1つは' const GLchar * const * '" _型です。関数を調べると、ポインタへのポインタの_配列が必要であることがわかります。 –

+0

つまり、ドキュメントをチェックしたなら、この回答が質問にまったく対処していないことが分かりました。 :) –

+0

しかし、ここで@LightnessRacesinOrbit秒間にハングアップします。あなたのコメントの後、私は文書をチェックしました。それは私がまさに正しいことを示しています。パラメータ*は実際には私が疑ったような出力パラメータです([here](https://www.opengl.org/sdk/docs/man/html/glShaderSource.xhtml)参照)。私の答えの問題は何ですか? – Smeeheey

関連する問題