問題タブ [downcast]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
8081 参照

java - 安全なダウンキャストを実行してClassCastExceptionを防ぐにはどうすればよいですか?

次のシナリオがあります。

クラスAB、またはCを返すことができるメソッドがあり、クラスタイプがCの場合に限り、Cに安全にキャストしたいと思います。これは、Foo()を呼び出す必要があるが、ClassCastExceptionが必要ないためです。

0 投票する
7 に答える
32839 参照

c++ - C++ は、仮想ベース A を介してベース A から派生型 B に変換できません

私は3つのクラスを持っています:

A* から B* への静的キャストを試行すると、次のエラーが発生します。

0 投票する
6 に答える
231 参照

c++ - 純粋仮想基底クラスで明示的な関数を作成せずにコピー構築を行うことはできませんか?

私の目的は、クラスのディープ コピーを作成することですが、仮想クラスが問題を引き起こしています。

コンパイル エラー メッセージ:

Vir から継承し、独自のメンバー (float a; や double b; など) を持つ Handler クラス (Handler1、Handler2 など) をさらにたくさん用意する予定です。したがって、すべての Handler クラスのすべての getter および setter 関数を Vir クラスに保持することは意味がありません。メンバーは Handler クラスに固有であるため、getter メソッドと setter メソッドを Handler クラスに保持したいと考えています。コンパイラは私にそうすることを許可していません。ヘルプ?

0 投票する
3 に答える
3686 参照

c++ - PythonSWIGラッパーからc++オブジェクトをダウンキャストするにはどうすればよいですか?

問題:SWIGを使用してPythonでいくつかのc++コードをラップしました。Python側では、ラップされたc ++ポインターを取得し、それをサブクラスへのポインターとしてダウンキャストしたいと思います。このダウンキャストを行う新しいc++関数をSWIG.iファイルに追加しましたが、Pythonから呼び出すと、TypeErrorが発生します。

詳細は次のとおりです。

BaseとDerivedの2つのc++クラスがあります。DerivedはBaseのサブクラスです。3番目のクラスであるContainerがあります。これには、Derivedが含まれており、それにアクセサーを提供します。アクセサは、次のようにDerivedをconst Base&として返します。

SWIGを使用してこれらのクラスをPythonでラップしました。私のPythonコードでは、Base参照をDerivedにダウンキャストしたいと思います。これを行うために、ダウンキャストを行うc++のヘルパー関数をswig.iファイルに書き込みました。

私のPythonコードでは、次のダウンキャスト関数を呼び出します。

これを行うと、次のエラーが発生します。

なぜこれが起こっているのでしょうか?

参考までに、SWIGによって生成された.cxxファイルの関連ビットを次に示します。つまり、元の関数とそのpython-interface-ified doppelganger:

どんな助けでも大歓迎です。

-マット

0 投票する
2 に答える
971 参照

c# - C#3.5でジェネリック型をダウンキャストする

ジェネリックのみをアップキャストでき、ダウンキャストできないのはなぜですか?
私の制約が言っていて、Uが有効なwhere T : BaseClassBaseClassから派生している場合、コンパイラにどのように明確ではありませんか?(U)objectOfTypeT

0 投票する
3 に答える
2430 参照

c++ - ベースが非ポリモーフィックからポリモーフィックに変わるときの派生クラスの static_cast

私は C++ キャスト演算子を見直していますが、次の疑問があります。

ポリモーフィック クラス用

  • 使用する必要がありますpolymorphic_cast
  • static_castダウンキャストは未定義の動作を引き起こす可能性があるため、絶対に使用しないでください。とにかく、コードはこのケースをコンパイルします。

今、私が次の状況にあるとします

ポリモーフィズムが含まれていないため、使用polymorphic_castしません。コードはコンパイルさえしません。

ある時点で、誰かvirtualが継承ツリーにいくつかの関数を導入し、私が今それを認識しているため、危険にさらされている場合: どうすればそれを実現できますか?

リスクを回避するために移動する必要polymorphic_castがありますが、コードは通知なしで引き続きコンパイルされます。

そのような変化を認識したり、これらのケースを防ぐために何をしますか?

ありがとうAFG

0 投票する
1 に答える
1161 参照

c++ - テンプレート引数のメンバーへのポインタをダウンキャストできないのはなぜですか?

ベースメンバーへのポインターを作成すると、通常は派生メンバーへのポインターに変換できますが、最初のテンプレート引数が2番目の引数に影響を与える以下のBuzzのようなテンプレート内で使用する場合は変換できません。私はコンパイラのバグと戦っていますか、それとも標準はこれが機能しないことを本当に義務付けていますか?

0 投票する
4 に答える
29955 参照

java - Javaオブジェクトをダウンキャストする方法は?

Javaのポリモーフィズムを理解しようとしていますが、オブジェクトのダウンキャストについて1つ質問があります。この例では、スーパークラスの動物から継承する2つのサブクラスDogとCatがあるとします。

私が理解したことから、オブジェクトをダウンキャストする唯一の方法は、このオブジェクトがすでに次のように適切なタイプであるかどうかです。

これは正しく機能しますか?

しかし、それが何であるかを知らずに通常の動物を作成し、それを知ったときにそれをキャストしたい場合はどうすればよいですか?

これにより、実行時にClassCastExceptionがスローされますか?

私がそれを行うために見つけた唯一の方法は、通常の動物から犬を作成する新しいDogコンストラクターを作成することです。

だから私の質問は、これをどのように行うべきかということです。

  • 私はそれを最善の方法でやっていますか?
  • 私はこれをまったく行うべきではありません、もし私がそうしなければならないのなら、私のプログラムはよく考えられていないということですか?
  • 私が逃したより良い方法はありますか?

どうもありがとう!nbarraille

0 投票する
5 に答える
33543 参照

php - 現在のオブジェクト ($this) を子孫クラスにキャストします

オブジェクトをさらに下の子孫クラスに変更する必要があるクラスがあります。これは可能ですか?1つのオプションはそのコピーを返すことですが、代わりに子クラスを使用することですが、現在のオブジェクトを実際に変更するといいでしょう...そう:

0 投票する
1 に答える
200 参照

java - Androidでオーバーライドされたメソッドの引数のサブメソッドにアクセスしていますか?

これは初心者の質問に違いありませんが、次のことを達成するための適切な待機が見つかりません。

Android では、View クラスを拡張するサブクラス MyView を作成しました。B では、View クラスに存在しないメソッド mMethod を定義しました。

ここで、MyView に OnClickListener インターフェイスを設定したいと思います。これを行うには、新しい OnClickListener を定義するときに onClick メソッドをオーバーライドする必要があります。さらに、onClick で mMethod メソッドにアクセスしたいのですが、オーバーライドされたメソッドは、MyView のインスタンスではなく、View クラスのインスタンスを想定しています。それで、なにかお手伝いできますか ?

より正確には:

そしてメインクラス(Activity)で

使用するmyView.mMethod()ことが唯一の解決策ですか? にダウンキャストvすることは可能(MyView)vですか? もしそうなら、それを行う方法は?サブインターフェースを定義する必要がありますか?

ありがとうございました!