2012-01-02 7 views
4

これは十分な質問ではないと私は謝ります。(自分の解決策がうまくいくので問題はありません)
私はCで育ったし、後でC++を学んだだけなので、偏っているかもしれませんが、それでもなおです。C++で適切な方法をキャストする

この特定のケースでは、const char*を返すライブラリがあり、別のライブラリにはvoid*が入力されています。最初の結果を使って2番目の図書館に電話したい場合は、

second(const_cast<void*>(static_cast<const void*>(first()))); 

のように書く必要がありますか?それが唯一の正しい方法ですよね?

+0

'const char *'を 'void *'に渡すべきではないかもしれません...バグにつながる/安全でないかもしれません。 – Marlon

+0

いいえ、2番目のライブラリは入力を変更せず、パラメータとしてvoid *が必要です。申し訳ありませんが、私はそれらの図書館を書いておらず、それらを変更することもできません。 –

答えて

8

char*が暗黙的にvoid*に変換することができますので、あなたのコードは、このように単純化することができます。

second(const_cast<char*>(first())); 

secondの定義はかのようにそのパラメータがタイプconst void*を持っていた動作する場合にのみ安全です。

+0

ねえ、いいです。私はそれを試みることを決して考えなかった。ありがとう。そして、はい、2番目のライブラリは入力を変更しようとしません。だからOKです。 –

+0

残念なことに、ライブラリ作成者はすべての 'const'指定子をポインタ引数に追加することを忘れてしまい、その関数を使うのがもっと煩雑になります。これは確かに、あなたが(比較的)簡単な良心で 'const_cast'を使うことができるケースの一つです。 – Gorpik

関連する問題