問題タブ [argument-dependent-lookup]

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 に答える
90 参照

c++ - テンプレート化された関数名のルックアップの難問 (ADL)

次のコードでは、より具体的な SomeClass ベースの関数ではなく、ジェネリック関数が呼び出されるのはなぜですか?

注: " void foo(const SomeClass<T>*)" 定義から const を削除すると、目的の関数が呼び出されます。影響はありませんでしたが、fooの再配置も試みました。可能であれば、この特定の ADL シナリオを説明する標準の関連領域を参照してください。

const あり: http://ideone.com/DIchLl

const なし: http://ideone.com/Iam4LV

const あり (1st): http://ideone.com/W6PoJw

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

c++ - 2つのポインターで呼び出さないのにswap()がうまく機能するのはなぜですか?

上記はテストサンプルです。を使用するswap(array[1], array[4]);と、配列内の2つの位置の値も交換されます。swap()しかし、関数には2つの整数値ではなく、2つのポインターが必要なので、これは私を混乱させます。

ご協力いただきありがとうございます:)

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

c++ - ADLは静的メンバー関数を検索しませんか?

これは、引数依存のルックアップは名前空間またはクラスのみを検索しますか?からのフォローアップの質問です。、@DavidRodríguezは「ADLは型の囲んでいる名前空間を調べ、型自体の内部も調べます」と述べています。私は彼が言おうとしたことを間違えたかもしれませんが、私はこの例を試していました:

コンパイルされず、エラー「'bar'はこのスコープで宣言されていません」が生成されます。ADLが静的メンバー関数を考慮しないのは事実ですか?つまり、関連するクラスの例では、fooADLはクラスの内部を調べないのでしょうか。。誰かがここでルールを単純化できますか?

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

c++ - Argument Dependent name Look-up (ADL) はどのような状況で機能しますか?

以下のウィキペディアの記事では、引用が言及されています:

ADL は、非修飾名の通常の検索で一致するクラス メンバー関数が見つからない場合にのみ発生します。この場合、通常のルックアップでは考慮されない他の名前空間 が検索される可能性があります。検索される名前空間のセットは、関数の引数の型によって異なります

したがって、以下のプログラムが正常にコンパイルされることを期待していましたが、そうではありません

SO でいくつかの質問を検索しましたが、要件や状況を簡単な言葉で表したものを見つけることができませんでした。
もう少し詳細な回答は、私と将来の訪問者にとって本当に役に立ちます。

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

apache-flex - Maven /FlexMojos4.2ベータを使用したAIRアプリケーションテストの実行

AIRアプリケーションであるMavenモジュールがあります。FlexMojosプラグイン(バージョン4.2-ベータ版)を使用しています。

編集さらに調査したところ、問題はテストTestRunner.xmlに使用された記述子にAIR 2.6名前空間があるのに対し、私のadlバージョンは3.6であることが明らかになりました。したがって、このバージョンまたは記述子全体を制御する方法が必要です。

テスト目標を実行すると、常にこのエラーが発生します。

[ERROR] Failed to execute goal org.sonatype.flexmojos:flexmojos-maven-plugin:4.2-beta:test-run (default-test-run) on project mobile-app: Unexpected return code 9

これが私のビルド構成です(flex.sdk.version=4.5.1.21328

を使用mvn test -Xすると、ADLが呼び出されていることがわかります。

[DEBUG] [LAUNCHER] exec: [adl] - /XXX/mobile-app/target/test-classes/TestRunner.xml

私の知る限り、adlのエラーコード9は次のことを意味しますThe main application content file is not a valid SWF or HTML file.

私は何が欠けていますか?どんな助けでも大歓迎です!

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

c++ - 引数に依存するルックアップのあいまいさを回避する目立たない方法

これが私のケースです:

Foo::atype を持ち、 a も指定するライブラリを使用しようとしてFoo::swapいます。私が使用している別のライブラリにはstd::vector<Foo::a>インスタンス化があります。Visual Studio 11.0 を使用して Windows でこれをコンパイルしようとしていますが、修飾されていないスワップ呼び出しを行うstd::vector::swapマップがダウンしていることに気付きました。_Swap_adl

これが、ADL とあいまいな関数の解決に関する問題に私を陥れるものです。Foo::swap私が消費しているライブラリに「大きな」変更を加えることなく(std::swapFooなどからスワップを削除/名前変更するだけのもの)、使用できるようにする魔法はありますか?

編集:何が起こっているのかとエラーをキャプチャする最小限の例を追加します。

コードの効率性についてはコメントしませんが、@ http://pastebin.com/Ztea46aCのエラー ログを参照すると、内部で何が起こっているかがわかります。これはコンパイラ固有の問題ですか、それともこのコードから得られるより深い学習はありますか?

編集2:問題の特定のタイプに特化しようとしましたが、あいまいさは解決しません。これがなぜそうであるかについての指針も同様に役立ちます。

http://pastebin.com/sMGDZQBZは、この試行のエラー ログです。

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

c++ - テンプレート内の引数依存のルックアップ

テンプレートのコンテキストでの関数名の検索について混乱しています。テンプレートがインスタンス化されるまで、コンパイラはテンプレート化されたコードで引数に依存する識別子の検索を遅らせることを知っています。つまり、テンプレート化されたコード内で構文エラーが発生したり、存在しない関数を呼び出したりすることがありますが、テンプレートを実際にインスタンス化しない限り、コンパイラは文句を言いません。

ただし、さまざまなコンパイラ間に不一致があることがわかりました。標準自体が何を必要としているのかを知りたいと思っています。

次のコードを検討してください。

テンプレート メンバー関数は、まだ宣言されていないという引数に依存しないグローバル関数をFoo::bar呼び出すことに注意してください。do_something

それでも、GCC 4.6.3 は上記のプログラムを問題なくコンパイルします。実行すると、出力は次のようになります。

ここにアイデアリンクがあります。

そのため、コンパイラはテンプレートがインスタンス化されるまで識別子の検索を遅らせたように見え、その時点でdo_something.

対照的に、GCC 4.7.2 は上記のプログラムをコンパイルしません。次のエラーが発生します。

したがって、GCC 4.7.2 は が後で宣言されていることを認識していますが、引数に依存しない do_somethingため、プログラムのコンパイルを拒否します。do_something

したがって、ここではおそらく GCC 4.7.2 が正しく、GCC 4.6.3 は正しくないと思います。おそらく、が定義されるdo_something前に宣言する必要があります。これに関する問題は、自分のクラスのユーザーがの独自のオーバーロードを実装しての動作を拡張Foo::barできるようにしたいと考えていることです。次のように書く必要があります。FooFoo::bardo_something

ここでの問題は、 のオーバーロードがdo_something内から見えないFoo::barため、呼び出されないことです。したがって、 を呼び出しても、 のオーバーロードではなくdo_something(int)呼び出します。したがって、GCC 4.6.3 と GCC 4.7.2 の両方で、上記のプログラムは次のように出力します。do_something(T)int

それで、ここでいくつかの解決策は何ですか?Foo::barユーザーが独自のオーバーロードを実装して拡張できるようにするにはどうすればよいdo_somethingですか?

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

c++ - ADL は名前付きラムダで動作しますか?

1 つの名前空間にクラスと名前付きラムダがあるとします。

このラムダは、インラインで宣言された関数とほぼ同等です。blaしかし、 ADL (引数依存ルックアップ、Koenig ルックアップとも呼ばれます) を使用して名前空間に言及せずに、別の無関係な名前空間からそのラムダを呼び出すことはできますか?

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

c++ - B::f はあいまいさを解決しないのに、A::f は解決するのはなぜですか?

B::f はあいまいさを解決しないのに、A::f は解決するのはなぜですか?