問題タブ [overload-resolution]
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.
c++ - Change constructor precedence
Is it possible to define a constructor for all derived types and a template constructor? I've written this testcase to illustrate my problem:
c++ - 可変個引数テンプレート関数でのostreamのオーバーロード
最初のパラメーター型でオーバーロードしたい可変個引数関数があります。
ただし、これらの関数は期待どおりに動作しません。
何が起きてる?
オーバーロード解像度が必要な関数を選択しないのはなぜですか?
多くのメタプログラミングなしでこれを行う方法はありますか?(私はそれを回避することができましたstd::is_convertible
が、解決策は私が上に示した単純なコードよりもはるかに大きかったです)。
vb.net - vb奇数変数はファイルパスとして問題を使用します
私はこの機能を持っています:
複数のストレージファイルを許可するためにファイルパスを渡すことができる変数になるように調整しようとしています。このようなもの:
ただし、関数1は機能しますが、関数2は機能しません-この役に立たないエラーが発生します。
私は通常PHPで作業していますが、この種のエラーはこれまで見たことがありません。それはどういう意味ですか?関数を書き直して必要なものを取得できますか?
c# - インターフェイスでの C# オーバーロード メソッドの動作
ちょっとした調査が 1 つだけあり、次のコードを作成しました。
コンパイラが常に 2 つのパラメーターを持つ短いメソッドを選択する理由について質問があります。そしてもちろん、これらはすべて同じ方法でインターフェイスなしで機能します。
ありがとう
java - Java: ランタイム メソッドの解決
私はインタープリターを介したコードの動的呼び出しに取り組んでおり、JLS セクション 15.12で説明されているように、メソッド解決の厄介な領域に取り組んでいます。
メソッドを選択する「簡単な」方法は、すべての引数の正確な型を知っている場合です。その時点でClass.getDeclaredMethod(String name, Class[] parameterTypes)
. メソッドのアクセシビリティとクラスのスーパークラス/スーパーインターフェースを確認する必要があるかもしれません。
ただし、これは次のケースのいずれもカバーしていないため、役に立ちません。
- ボックス化/ボックス化解除プリミティブ
- サブタイプ
- 可変引数
- null 引数 (インタープリターが別の方法で認識していない限り、任意の型にすることができます。コンパイル時に null をクラス/インターフェイスにキャストすることにより、あいまいさが解消されます)
- プリミティブ型変換 (Java の一部ではありませんが、言語のコンテキストでは許容されます。たとえば、Rhino Javascript ではすべての数値が浮動小数点であるため、Java コードは an を取る可能性があります
int
が、呼び出し元は anint
または a のいずれかの数値を渡しますdouble
)
(最初の 3 つの簡単な例については、以下を参照してください)
そのため、独自のメソッド解決ライブラリを作成する必要があります...
これを支援する有名なフレームワーク ライブラリはありますか?
c# - C# コンパイラのオーバーロード解決アルゴリズムが、同じシグネチャを持つ静的メンバーとインスタンス メンバーを同じものとして扱うのはなぜですか?
署名によって等しい 2 つのメンバーがあるとしますが、1 つは静的で、もう 1 つは静的ではありません。
しかし、そのようなコードを生成すると、コンパイラ エラーが発生します。
型 'Foo' は、同じパラメーター型を持つ 'Test' というメンバーを既に定義しています
しかし、なぜ?
それを正常にコンパイルすると、次のようになります。
Foo.Test()
「静的」を出力する必要がありますnew Foo().Test();
「インスタンス」を出力する必要があります
インスタンス 1 の代わりに静的メンバーを呼び出すことはできません。この場合、別のより妥当なコンパイラ エラーが発生するためです。
インスタンス参照ではメンバー 'Foo.Test()' にアクセスできません。代わりに型名で修飾してください
c++ - このコンストラクターのオーバーロードが正しく解決されないのはなぜですか?
これは私の(ストリップされた)クラスと1つのオブジェクトのインスタンス化です:
これがコンストラクターを呼び出すことを期待しますCarray(size_type, const T&, const Allocator&)
が、そうではありません。どうやらこれはに決心しtemplate<typename InputIterator> Carray(InputIterator, InputIterator, const Allocator&)
ます。
これを意図したとおりに機能させるには、何を変更する必要がありますか?std::vector<int> v(5, 10)
の呼び出しは完全にうまく機能するので、私もそれが奇妙だと思います。そして、GCCの実装でコンストラクターの定義を見ると、次のことがわかります(コンパイラー実装名の名前を次のように変更しました __n
)。
同じようです。
c++ - const/non-const オーバーロードの解決に関する問題
次のようなクラスがあります。
クラスの外では、Get() 関数を呼び出します。
これで公開バージョンが呼び出されることを期待していますが、代わりに Visual Studio でエラーが発生します。
保護されたオーバーロードをコメント アウトし、それへのすべての参照を削除すると、コードがコンパイルされます。
アクセス可能なメンバーが利用可能な場合、コンパイラがアクセスできないメンバーを使用しようとするのはなぜですか? コンパイラに正しいオーバーロードを強制的に選択させる方法はありますか? メンバー関数の解決規則への参照はどこにありますか?
c# - ここで「これ」が必要なのはなぜですか(拡張方式)?
メタノート:「this」という単語を検索することはできません。
this
キーワードが必要なASP.NETで奇妙なシナリオに遭遇しました。ただし、コンストラクターで見られるように、ローカル変数とインスタンス変数の間で解決することを目的としたものではありません。
Microsoft.Web.Mvcには、というクラスが含まれておりControllerExtensions
、オーバーロードを使用していRedirectToAction(Expression<Action<TController>> action)
ます。オーバーロードは拡張機能であるため、これは特別なことかもしれません。
RedirectToAction(c => c.Index())
コンパイルされません、そしてそれは言いCannot convert lambda expression to type 'string' because it is not a delegate type
ます。これは、文字列を受け取る最初のオーバーロードを使用していると思われるように聞こえます。
this.RedirectToAction(c => c.Index())
正常にコンパイルされます。this
最初のパラメーターとして渡すことで、静的に呼び出すこともできます。
式を受け取るオーバーロードを探していることをコンパイラが理解できず、それを使用できないのはなぜですか?メソッドはアクションだけでなくアクションの表現をとるので、それが関与している必要があります。Expressions名前空間をまったく理解していないため、このパラメーター型を使用する目的がわかりません。
#1の答えに関係なく、なぜ単に追加するだけで
this
すべてが修正されるのでしょうか。
c++ - 関数パラメーターとしてのC++0xconstRValue参照
私は、なぜ誰かが定数値参照をとる関数を書くのかを理解しようとしています。
以下のコード例では、const rvalue参照関数(「3」を返す)の目的は何ですか。また、オーバーロード解決では、constLValue参照関数よりもconstRvalueが優先されるのはなぜですか(「2」を返します)。