問題タブ [using-directives]
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++ - 派生クラスでオーバーロードされている基本クラスからメソッドを転送するために、C++11で「using」ディレクティブが依然として必要なのはなぜですか。
以下の例では、次のコンパイル済みエラーが発生します。
これはC++11で変更されているので、usingステートメントを入力する必要がないことを理解していました。それは正しくありませんか?これを回避する他の方法はありますか?
例(--std = c ++11を使用してgcc4.7でコンパイル):
c++ - 派生クラスでディレクティブを使用すると、継承がパブリックに変更されます
非常に単純な質問ですが、まだ混乱しています。
using ディレクティブが継承を変更するのはなぜですか!? これは Comeau でコンパイルされます。
using ディレクティブ (宣言?) によって変数が public になると読みましたが、なぜですか? 私が欲しいのは、常に B 内に記述しないという素晴らしい方法this->x
です...?
ありがとう!
c++ - C++11 `using` キーワード: テンプレート パラメーターの特殊化テンプレート エイリアス
今日、using
キーワード inを使用して問題が発生しましたC++11
。ここで別のアプローチを使用することにしました (以下の例にコメントとして追加されています)。X
を mixinのマトリックスと考えることができ、目的はinY
の転置されたマトリックス型にアクセスすることです。にing する代わりに、より強力な別のアプローチを採用し、2 つのテンプレート パラメーター自体を受け取るエイリアスを定義します。X
Y
typedef
X<B,A>
X<A,B>
Sibling
上記のコードをコンパイルしてみましたがg++-4.7 -std=c++11 -c
、次のエラー メッセージが表示されます。
なぜエラー メッセージが表示されるのか、またはどのように修正できるのかがまったくわかりません。誰かが私に問題が何であるかを説明できますか?
どうもありがとう!
jquery - Angularjs-ディレクティブまたはウィジェットを使用してDOMを動的に変更しますか?
私の目標は、angularJSを正しく使用する方法を理解することです。変数の選択を、angularJSを使用してDOM構造を動的に変更することに結び付けられるようにしたいと思います。私はangularが提供するドキュメントを完全に理解しているとは思いませんし、ここやその他の例も見つかりませんでした。どんな助けでも大歓迎です。
アイデアは、最初にタイプの選択から始め、そのタイプから選択された適切な入力タイプ要素が作成され、後でng-modelで記録されるというこのユースケースがあるということです(たとえば、テキストエリアからチェックボックスまで) 、検証/制限のためにangularjsコントローラーによって制御されている間中。私はページにクローン可能な要素を置き、jQueryで新しいものを破棄して作成するという考えに慣れていますが、コントローラーにはこのロジックを持たせず、代わりにディレクティブ/ウィジェットを使用して作成する必要があることを読んでいます。ただし、このように操作されているディレクティブやウィジェットの例は見当たらないので、どのように進めるかさえわかりません。ディレクティブを使用して、監視対象の要素に基づいて、この方法でDOMを1回だけでなく、複数回操作できますか?
私がやりたいことの例。
タイプ1を選択します。
- 2つのテキスト領域を表示する
タイプ2を選択します。
- 数値入力を表示する
- 日付ピッカーを表示する
c++ - すべての使用ディレクティブは、名前空間 std を使用する場合と同じように表示されますか?
私は簡単に、標準の識別子の前に.std::
を付ける代わりにusing namespace std;
. しかし、私は C# を使い始めて、必要な using ディレクティブを追加するのが非常に普通であることに気付きました。つまり、次のようになります。
それ以外の:
どうやら、このトピックに関する C# の質問からわかったように、その使用法は、C# の個々のシステム名前空間が C++ よりもはるかに小さいという事実に由来するstd
ため、名前の衝突に関連する問題が解消されます。可能性が低く (ライブラリが名前の衝突で更新された場合は、完全修飾名で検索して置き換えることができます)、名前空間が処理するのに十分小さいため、表示される Intellisense オプションのがらくたの負荷に関連する問題が解消されます。
問題は、これらが C# で using ディレクティブを使用する永続的な理由である場合、C++ にも同じことが当てはまるかということです。これを小さなサードパーティの名前空間や独自の小さな名前空間に適用することは一般的に受け入れられますか?
今、これが少し論争を引き起こすかもしれないことを理解しています。この瞬間を利用して、それが議論にならないようにお願いしたいと思います. 良い答えには、根拠、つまり長所または短所が含まれている必要があります。また、ある方法を別の方法で使用することによって実際に価値のある違いがどのように生じるかを示す必要があります。
私がこれを尋ねる理由は、問題を解決し、おそらく C++ でディレクティブを使用することは悪いことであるという考えを取り除くためです。確かに、必要に応じて名前空間エイリアスを使用してより長い名前空間名を削減でき、必要に応じて完全修飾名を使用することもできますが、using ディレクティブを使用すると、ユーザー定義のリテラル演算子などの一部のメンバーへのアクセスが大幅に容易になることがあります。つまり、using ディレクティブを使用するか、関数構文でオペレーター メソッドを呼び出す必要があり、そもそもオペレーターを使用する目的全体が無効になります。
たとえば、名前空間がありました (これには、キーボード キーを表す構造と、読み取り可能な代替アクセス手段としてのリテラル サフィックスが含まれます。
ここでの問題は、以前にusing namespace Whatever;
orを挿入していない限りusing Whatever::operator"" _key;
、コードがコンパイルされないことです。これは、ユーザーにとって悪いニュースです。
ディレクティブを使用std
すると、そのヘッダーのユーザーに不要な余分なものをもたらすような方法で使用される場合、またはヘッダーで使用される場合に明らかな問題があります。ヘッダ?毎回各修飾子を入力する必要がないため、キーストロークを節約できます。また、今日の Intellisense 機能を使用すると、修飾されていない識別子がどの名前空間に属しているかをマウスオーバーするのと同じくらい簡単に見つけることができます。
c++ - c++ using ディレクティブのスコープ
c++11 標準のセクション 7.3.4.2 から:
using-directiveは、指定された名前空間の名前が using-directive の後に using-directive が現れるスコープで使用できることを指定します。非修飾名のルックアップ (3.4.1) では、名前は、 using ディレクティブと指定された名前空間の両方を含む、最も近い外側の名前空間で宣言されているかのように表示されます。[ 注: このコンテキストで「含む」とは、「直接的または間接的に含む」ことを意味します。—終わりのメモ]
2番目と3番目の文は正確にはどういう意味ですか? 例を挙げてください。
これが私が理解しようとしているコードです:
私が期待するように、「7 18」ではなく「7 7」と印刷されます。
タイプミスで申し訳ありませんが、プログラムは実際には「7 11」を出力します。
c++ - ADL が「std 名前空間」の関数よりも優先されるのに、ユーザー定義の名前空間の関数と等しいのはなぜですか?
デモ用に ADL の 2 つのスニペットがあります。どちらのスニペットも VC10、gcc、comeau C++ コンパイラでコンパイルされており、結果は 3 つすべてで同じです。
<1>ユーザー定義の名前空間のディレクティブを使用することに対する ADL:
コンパイル結果:
これは、ADL が通常のルックアップ結果よりも優先されず、ADL が第 2 級市民ではないため、ADL 検索結果が通常の (非 ADL) 条件のないルックアップと結合されるためです。だからこそ、私たちはあいまいさを持っています。
<2> std 名前空間のディレクティブを使用することに対する ADL:
これは正常にコンパイルされます。
その結果、コンパイラは ADL の結果を選択します (std::swap よりも優先されます)。つまりN::swap()
、「ポイント 1」で呼び出されます。「ポイント 1」がない場合 (たとえば、その行をコメントアウトした場合) のみ、コンパイルはstd::swap
代わりにフォールバックを使用します。
この方法は、 を上書きする方法として多くの場所で使用されていることに注意してくださいstd::swap
。しかし、私の質問は、ADL が「std 名前空間」(case2) よりも優先されるのに、ユーザー定義の名前空間関数 (case1) と同等と見なされるのはなぜですか?
そう言っているC++標準の段落はありますか?
================================================== =============================== 有用な回答を読んだ後に編集すると、他の人に役立つかもしれません。
だから私はスニペット1を微調整しました&今ではあいまいさがなくなり、オーバーロードの解決を行うときに非テンプレート関数を明らかに優先してコンパイルします!
スニペット 2 も微調整しました。あいまいさを楽しみのために表示するためです。
gcc と comeau はどちらも、予想どおりあいまいさを示しています。
ところで、いつものように愚かな VC10 は、「using std::swap」を削除しない限り、これを問題なく通過させます。
もう少し書く必要があります: C++ のオーバーロードはトリッキーになる可能性があります (C++ 標準では 30+ ページ) が、付録 B には非常に読みやすい 10 ページがあります...
すべての素晴らしい入力に感謝します。これで明確になりました。
c++ - 'using'ディレクティブで継承された純粋仮想メソッドを実装できないのはなぜですか?
Test
クラスをの観点から実装したいのImplementation
ですが、
方法。なぜこのようにすることができないのですか?C ++ 03に他の方法はありますか?
c# - system.ioを使用するC#は私のクラスでは機能しませんが、メインでは機能します
今まで経験したことのない問題に取り組んでいます。私はVS2012 C#を使用しています
を使用して追加するSystem.IO
と; 私のメイン プログラムではすべて正常に動作しますが、それをクラス ファイルに追加すると、すべてのメソッドを使用できなくなります。
何らかの理由で追加できません。ピリオドを追加するとすぐに、インテリセンスが閉じてオプションが表示されなくなります。自分で入力すると、赤く表示され、次のように表示されます。
System.IO.File.Exists(string)
メソッドですが、型のように使用されます
c++ - テンプレートの特殊化のための using-like ステートメント
ヘッダーに次の定義があるとします。
今、ヘッダーのユーザーが次のようなことができるようにしたいと思います
これは明らかに不可能です。
この理由は、自分の operator + が標準の operator + に干渉したくないため、ユーザーがどの型に対して operator + を定義する必要があるかを指定できるようにするためです。これを達成する方法はありますか?