問題タブ [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.
argument-dependent-lookup - アーキテクチャ記述言語 (ADL) の使用?
ソフトウェア アーキテクチャ モジュールのプロジェクトを行っており、ADL を使用して「ビュー」の 1 つを作成する必要があります。さまざまな ADL について調査を行っているうちに、それらのほとんどが過去 5 年以内に更新されていないことがわかりました。
ADL は業界で使用されていますか、それとも単なる UML ですか? 役に立たないことを教えられているような気がします:s
前もって感謝します
c++ - テンプレートと引数に依存するルックアップ
このプログラムをコンパイルするとき、operator<< 呼び出しがグローバル名前空間の名前に解決されることを期待していましたが、代わりに、コンパイラがあいまいなオーバーロードを報告します。引数依存のルックアップにより、潜在的な一致として含まれる名前空間内の関数の前に、非依存のルックアップが発生したと思いました。これは、非テンプレート関数の場合のようです。
誰か説明できますか?
コンパイラ出力:
c++ - このプログラムが値を交換するのはなぜですか?
次のコードがあります。
プログラムの出力は次のとおりです。
プログラムは実際に値を交換します! 何故ですか?のパラメーターは、swap()
ポインターまたは参照ではありません。
(私はVS 2005を使用しています)
sharepoint-2007 - SharePoint 2007 動的フィルター検索
みんなおはよう。SharePoint 2007でライブラリ テンプレートを設定するためのヘルプを探しています。詳細は次のとおりです。
いくつかのサブサイトを持つ親サイトがあります。
各サブサイトに配置できるライブラリ テンプレートを設定したいと考えています。これらのライブラリは、メタデータ オプションを提供するために、親サイトの一連の集中リストから取得します。このように、1 セットのリストを維持するだけでよく、維持されたリスト情報は各図書館で利用できるようになります。
ライブラリはメイン サイトのサブサイトに存在するため、単純なルックアップは使用できません。通常のルックアップ列の種類は、現在のサイト内のリストに対してのみ機能します。
フィルター処理されたルックアップ列の種類にアクセスできます。親サイトの集中管理されたリストにアクセスできるため、正しい選択のように思えます。
このテンプレートに基づいてライブラリにファイルをアップロードするときに、ユーザーにプロンプトが表示されるようにしたいと考えています。ファイルを選択すると、入力するメタデータの選択肢のリストが表示されます。
最初のフィルタリングされたルックアップで、ユーザーに選択肢のリストを提供したいと考えています。これは現在正常に動作します。
2 番目のフィルター処理されたルックアップで、最初のフィルター処理されたルックアップでの選択に基づいて、フィルター処理された選択肢のリストを提供する必要があります。
CAML クエリ フィルター文字列のセクションがあり、ここでハングアップします。静的な値ではなく、フィールドを参照する文字列をどのように記述しますか?
これは私が試したものです。[クエリ フィルターの適用] フィールドに、次のように入力しました。
これは機能しますが、値が静的文字列であるBlueである結果のみを提供します。Categoryの実際に選択された値を参照する方法を探しています。それは次のような効果があります:
今の私のハングアップは、適切な構文がわからない、またはそのような構文が存在するかどうかです。
ご提案いただきありがとうございます。私はこのアプローチに縛られていないので、同じ目標を達成する別の方法があれば、喜んでそれを楽しませます.
c++ - テンプレート関数を使用したネストされた名前空間での C++ ADL
C++ の標準 ADL 解決について質問があります。
私の問い合わせを説明するサンプルコードは次のとおりです。
それで、私の質問は、ADLに関する基準は何ですか? 引数の親名前空間からのすべての関数を見つける必要がありますか、または引数 + グローバル関数の (ネストされた) 名前空間で使用可能な関数のみを見つける必要がありますか?
このプログラムは MSVC 2008 でテストされています (SP でコンパイルされますが、SP なしではコンパイルされません...)。
c++ - 一般的に開始し、さらにローカルの using 宣言を考慮した decltype
C++0x の ranged-for ループには、配列を処理するための特別な例外があり (FDIS §6.5.4)、std::begin と end の 2 つの関数があり、配列を処理するため、または begin/end メソッドを選択するためにオーバーロードされます。これにより、一般的なシーケンスを受け入れる関数は、範囲指定された for ループの動作に一致するように記述できると思います。
C の名前空間に「より具体的な」begin/end がある場合は、ADL を介して選択されます。それ以外の場合、コードは std::begin/end に「デフォルト」設定されます。
ただし、範囲指定には特別な例外がある理由があります。ポインターを受け取る意味的に異なる begin/end を持つ名前空間で型の配列を渡す場合、std::begin/end の配列形式は選択されません。
これを回避するには、独自の begin/end ラッパー (内部で ADL を使用する) を作成し、std::begin または ADLized begin の代わりに明示的に呼び出すよりも良い解決策はありますか?
しかし、上記の省略記号で示されているように、my::begin! の書き方さえわかりません。その decltype に対して、ローカルの using 宣言と ADL によって選択される型を選択するにはどうすればよいですか?
c++ - 3.4.2n3290ドラフトからの引数依存の名前ルックアップ
ISOドラフトn3290セクション3.4.2パラグラフ1からのポイント:
関数呼び出しのpostfix-expressionがunqualified-idの場合、通常の非修飾ルックアップでは考慮されない他の名前空間が検索される可能性があり、それらの名前空間では、他の方法では表示されない名前空間スコープのフレンド関数宣言が見つかる可能性があります。検索に対するこれらの変更は、引数のタイプ(および、テンプレートテンプレート引数の場合は、テンプレート引数の名前空間)によって異なります。
ここで彼らは、「検索に対するこれらの変更は、引数のタイプ/テンプレートテンプレート引数/テンプレート引数の名前空間に依存します」と述べました...例を挙げて説明できる人はいますか?argumetnタイプで試してみました。テンプレートテンプレート引数タイプとテンプレート引数タイプの名前空間で説明してください
c++ - Visual Studio10とGCC4.5の間のどのコンパイラが、演算子のオーバーロードと引数に依存するルックアップに関して正しいですか?
私は次のコードを持っています:
Visual Studio 10では、上記のコードは正常にコンパイルされます。コンパイラは、Bar
からインスタンス化できることを認識しFoo&
ます。したがって、適切なを呼び出し、operator >>
次にインスタンスを返しBar
、コンストラクタFoo(const Bar &)
を適切に呼び出します。
ただし、GCC4.5は上記のコードをコンパイルしません。次のエラーが出力されます。
言語標準によると、なぜ上記が発生し、どのコンパイラが正しいのですか?
編集:
存在するのに、なぜC ++Foo
はの結果として一時オブジェクトを作成するのですか?c = a >> b
Foo(const Bar &)
c++ - C++ のカスタム型の swap(): ADL またはテンプレートの特殊化を使用しますか?
重複の可能性:
クラスにスワップ機能を提供するにはどうすればよいですか?
同様の質問 (例: std::swap() をオーバーロードする方法) がここで尋ねられましたが、まだ決定的な答えはありません。
swap()
さまざまな情報源から、カスタム型を拡張する (さまざまな人による) 推奨される 2 つの方法を知っています。
- 同じ名前空間に無料の関数を記述し、ADLで検索します。
- あなたのタイプに特化し
std::swap()
たテンプレート。
最初の方法はもう少しエレガントに見えますが、克服する方法がわからない問題があります。
上記のスニペットにmy_type
は、swap()
stdlib コンテナーと同様のメンバーがあります。これは無料の機能の代わりではないことに注意してください。ここで、問題はコメント行にあり、2 つfield
の s が入れ替わっています。何でもかまいませんので、一般的なバリアントではなく、そのためにカスタマイズされたtype
ものを使用したいと思います。ただし、ADL を使用できない (ように思われる) のは、を削除すると、コンパイラは常に、明らかに適切ではないメンバー関数を選択するためです。そこを離れると、ADL に依存するカスタマイズはバイパスされますが、特殊化は引き続き使用できます。swap()
type
std::
type
std::
swap()
std::swap()
swap()
上記のユースケースは、アルゴリズムのすべての ADL カスタマイズを打ち負かしませんか? または、メンバーswap()
を持つクラス内でADL ルックアップを使用することはまだ可能ですか?swap()
c++ - テンプレートなしのADL
テンプレートを使用せずにADLの例を見せてもらえますか?そのようなものを見たことがない。私はここのようなものを意味します。具体的には、前述のような落とし穴につながる例に興味があります。
編集:
Tomalakの答えは落とし穴にまで拡張できると思います。このことを考慮:
ここでは、名前のない名前空間からfが呼び出されることを期待していますが、代わりに別の名前空間が呼び出されます。