問題タブ [upcasting]

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 投票する
2 に答える
438 参照

java - Java 受け渡し変数 - ダウンキャスト

私は機能を持っています。

helloworld(list<object> names)

私は次のコードを持っています:

今、私がに渡したいnewMe場合helloworld(newMe);。これは、ダウン キャスティングであるため不可能です。どうすればこの問題を克服できますか? リストを (オブジェクト) にダウンキャストしてから、アップキャストしようとしますか? 別の方法はありますか?例をいただければ幸いです。

ありがとう

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

c++ - SFINAE は関数本体に適用されますか?

次のサンプルコードがあります。

(ライブサンプル)

オーバーロード解決規則に基づいて、基本クラスの型が であるため、非テンプレート バージョンを優先する必要がありSerializableます。ただし、オーバーロード解決のためにテンプレート バージョンをインスタンス化するときにエラーが発生すると、SFINAE が起動することを期待しています (型に対して >> 演算子が定義されていない場合は考慮されないため)。

テンプレートが使用されないのに、まだ失敗するのはなぜですか?

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

f# - この式は IDataReader 型を持つことが期待されていましたが、ここでは SqlDataReader 型を持っています

次のコードは、 の呼び出しでSqlDataReaderfromの戻り値をgetReader正しくキャストしていません。私は何を間違っていますか?IDataReaderSeq.unfold

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

c - C が address-of 演算子を必要としないのはいつですか?

Cでは、アドレス演算子が必要ない配列以外の場合はありますか? たとえば、次のコードには演算子のアドレスが必要です。

しかし、このコードには address-of 演算子は必要ありません。

ここでmemsetは次のように宣言されています。

そしてCでは、それchar[]をaに自動キャストvoid*しますが、次のように同じことをしようとしていますfoo_t:

動作せず、予想されるコンパイル時の型エラーを生成します。例のようchar[]に、配列を使用すると機能します。

再び自動的に を にキャストしfoo_t[]ますvoid*

この種のキャストが C で発生するのはこれだけですか? これらのキャストがいつ行われるかをどのように知ることができますか?

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

python - Python C++ バインディング タイプ アップキャストの問題

大規模なライブラリ (具体的には OpenBabel) に依存し、そのクラスの一部をクラスのベースとして使用する C++ コードがあります。このライブラリには、SWIG で作成された独自の Python バインディングがあります。このライブラリのインターフェイスの '%import' を使用して、コード用に SWIG で Python バインディングを構築しました。私のクラスを Python コードでライブラリのルーチンに渡す場合、これは問題なく機能します。ただし、クラスからライブラリのルーチンを取得する際に問題が発生します。

アイデアを明確にするために、いくつかのコードを示します。C++版の場合

今、私はPythonで同じことをしたい:

これにより、エラーが発生します。AttributeError: 'Base' object has no attribute 'toString'

print(d)<Library.Base; proxy of <Swig Object of type 'std::vector< Library::Base * >::value_type' at 0x7f0ff8279a20> >これは C++ のラッパーです。Base*

アップキャストに関するこのアドバイスを見つけました: d.__class__ = Derived、しかし、これは私にとって奇妙に見えます。また、うまくいきません。

では、Pythonでどのようにアップキャストする必要がありますか、または何が間違っていますか?

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

java - スーパークラス インスタンスを受け入れるメソッドにサブクラス インスタンスを渡すことはできますか

これに似た設定があります。Java Reflections を使用して execRequestメソッドを呼び出そうとすると、 parameterArrayでDelRequestであるサブクラス インスタンスを渡すと、NoSuchMethodFound 例外が発生します。

サービス メソッドはほとんどなく、最終的に次のコード行を呼び出します。今回は 、スーパークラス インスタンスをreqに渡していることに注意してください。定義されているのはメソッド シグネチャpublic String execRequest(Request request) です

これは私の基本的な設定ですが、どこが間違っているのでしょうか。

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

c# - 同じ型のインスタンスの配列を動的にアップキャストする

このlinqpadコードを考えると:

IEnumerablesこれらの項目を実際の派生型に変換する最も効率的な方法は何ですか?

DoStuffToArray<T>(IEnumerable<T> items)
リスト内の異なるタイプごとに1回動的に呼び出す必要がある署名付きのメソッドがありますi。インターフェイスではなく、派生型で呼び出す必要があるライブラリ メソッドです。

このメソッドを使用して 2 つの型付き配列を取得できましたが、より良い方法はありますか?