3

私は C++ に比較的慣れていませんが、バックグラウンドは Java です。Java から C++ にいくつかのコードを移植する必要があり、Object Java のクラスに関して疑問が生じました。したがって、これを移植したい場合:

void setInputParameter(String name, Object object) { ..... }

void* タイプまたはテンプレートを使用する必要があると思いますか? それを達成するための「標準的な」手順が何であるかわかりません。

ありがとう

4

2 に答える 2

2

それはあなたが何をしたいかによって異なりますobject

テンプレートを使用する場合、呼び出すメソッドobjectはコンパイル時にobjects 型にバインドされます。オブジェクトの無効な使用はコンパイラ エラーとしてフラグが立てられるため、これはタイプ セーフであり、推奨されます。

また、 a を渡しvoid *て目的の型にキャストすることもできます。これはより危険で、コードのバグの影響を受けやすくなります。dynamic_cast<>を使用して実行時の型チェックを有効にすることで、少し安全にすることができます。

于 2010-04-15T20:46:34.360 に答える
1

任意のオブジェクトへのポインターを受け入れたい場合は、型をvoid *. ただし、それは関数の終わりになりますvoid *。値を保存したり、既知のオブジェクトへのポインターにキャストしたりする以外は何もできません。とにかくキャストする場合は、おそらくオブジェクトが何であるかを知っているので、. は必要ありませんvoid *

C++ には、Java と同じ種類のイントロスペクション機能がありません。つまり、 のような便利な言い方はありませんmyObject.getClass().getName()。私が知っている最も近いものは、実行時型情報 (RTTI) です。これは、ここで実際に確認できます

もう 1 つの方法は、独自のルート クラスを作成し、独自のイントロスペクション メソッドを記述することです (多くの C++ フレームワークがこれを行っています)。

于 2010-04-15T20:52:48.130 に答える