問題タブ [dependent-name]
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++ - 「template」および「typename」キーワードをどこに、なぜ配置する必要があるのですか?
typename
テンプレートでは、template
依存する名前を配置する必要がある場所と理由は?
とにかく、従属名とは正確には何ですか?
次のコードがあります。
私が抱えている問題はtypedef Tail::inUnion<U> dummy
ラインにあります。私はそれinUnion
が従属名であることをかなり確信しており、VC++ はそれを窒息させているのはまったく正しいことです。また、inUnion がテンプレート ID であることをコンパイラーに伝えるためにどこかに
追加できるはずであることもわかっています。template
しかし、正確にはどこですか?そして、inUnion がクラス テンプレートである、つまりinUnion<U>
、関数ではなく型の名前を付けていると想定する必要がありますか?
c++ - 依存する基本クラスからのタイプへのアクセス
依存する基本クラスから型名をインポートするためにusing-declarationsが機能しないように見える理由を誰かが知っていますか?これらはメンバー変数と関数に対して機能しますが、少なくともGCC 4.3では、型に対して無視されているようです。
いくつかのレベルの継承を通じて継承したいアロケータスタイルのtypedefのセットを持つ基本クラスがあります。私がこれまでに見つけた最善の解決策は上記のバージョン3ですが、なぜバージョン4が機能しないように見えるのか興味があります。GCCはusing-declarationを受け入れますが、それを無視しているようです。
C ++ Standard、C++Progを確認しました。ラング。第3版 [Stroustrup]、およびC ++テンプレート[Vandevoorde、Josuttis]ですが、using-declarationsを依存する基本クラスタイプに適用できるかどうかについては言及されていないようです。
別の例を見るのに役立つ場合は、GCCメーリングリストで質問されているが実際には回答されていない同じ質問があります。質問者は、他の場所で「typenameの使用」を見たことがあるが、GCCはそれをサポートしていないようだと示しています。私はそれをテストするために利用できる別の適合コンパイラを持っていません。
c++ - Visual C ++コンパイラは、「typename」のない型としてdependent-nameを許可しますか?
今日、私の友人の1人が、次のコードが彼のVisualStudio2008で適切にコンパイルされると教えてくれました。
私は通常g++を使用しますが、2番目のPrintAll()呼び出しを渡すことを常に拒否します。私が知っているように、この問題に対して、g++はテンプレートを翻訳する標準的な方法を実行しています。
それで、私の知識は間違っていますか、それともVS2008の拡張ですか?
c++ - テンプレートパラメータとして整数を使用する場合のコンパイラエラー
次のコードの何が問題になっていますか?
関数内B::bar
でコンパイラは文句を言います:
エラー:タイプ''および'int'の無効なオペランドから二項'演算子<'</ p>
Aがテンプレートでない場合、すべてが正常にコンパイルされます。
c++ - C++の非テンプレートクラスに特化したメンバー関数
テンプレート化されたパラメーターを使用して、非テンプレートクラスのテンプレートメンバー関数を特殊化しようとしています。
これで「明示的なテンプレート引数の不正使用」というエラーが発生します。これを有効にするための正しい構文は何ですか?
更新:
おそらく、私は過度に単純化することによって問題を混乱させました。私が本当にやりたいのは、扶養家族の名前が関係しているこの1つのケースを特別に処理することです。これは、ここの作品にモンキーレンチを投げ込んでいる可能性があると思います。私の当初の考えは、関数自体をオーバーロードすることでした。
しかし、特別なFooは呼び出されません。どうやってやるの?
c++ - 複数のネストされた依存名-typenameキーワードをどこに貼り付けるか?
この質問は、この他の質問に触発されました。その質問に答えようとしているうちに、私は自分自身にたくさんの質問があることを理解しました。だから...次のことを考慮してください:
これは、MSVC9.0およびOnlineComeauで正常にコンパイルされます。しかし、気になるのはtypename
、(1)で何を言っているのか、(2)でなぜ必要ないのかわからないことですtypename
。
私はこれらの2つの構文(構文?)を試しましたが、どちらもMSVCでは失敗するはずです。
と
もちろん、回避策はtypedef
次のように連続してを使用することです。
良いスタイルは脇に置いておきますが、構文的には、前述の回避策を使用する必要がありますか?
残りは興味深い例です。読む必要はありません。質問にはそれほど関係ありません。
typename
MSVCは複数のs(つまり(1)と(2))のない元の奇妙な構文を受け入れますが、前述の質問のように奇妙な動作を引き起こすことに注意してください。ここでもその例を簡潔な形で提示すると思います。
これはコンパイルされません。私が言及した回避策は問題を解決しますが、ここでの問題は私の最初の質問であると確信しています-タイプ名がありませんが、どこに貼り付けるかは本当にわかりません。よろしくお願いします。
c++ - テンプレート基底クラスのテンプレート関数の呼び出し
コードは次のとおりです。
そして、実行時:
次のエラーが表示されます。
非依存の名前と 2 フェーズのルックアップを認識しています。しかし、関数自体がテンプレート関数 (foo<>()
コード内の関数) である場合、すべての回避策を試しても失敗しました。
c++ - C++ 98 標準は、ローカルで宣言されたテンプレート名が依存しないことをどこで指定していますか?
このページによると: http://womble.decadent.org.uk/c++/template-faq.html#non-dependent "非依存名は、テンプレート パラメーターに依存しないと見なされる名前と、名前テンプレート自体とその中で宣言された名前 (メンバー、フレンド、およびローカル変数) の
これは、次のコードが有効であると見なされているという事実によって裏付けられているようです (LLVM/Comeau による)。
C++ 98 標準をしばらく読んだ後、この動作が指定されている場所を見つけることができません。これについては、「temp.nondep」の下で言及されると思います。
c++ - C++ テンプレートの 2 段階の名前検索 - なぜ?
C++ 標準でテンプレートの 2 フェーズ ルックアップが定義されているのはなぜですか? 非依存の宣言と定義のルックアップもインスタンス化の段階まで延期できませんでしたか?
c++ - テンプレート基本クラスの typedef メンバーが非表示
デフォルトでは、「依存名」がコンパイラに表示されないという事実を認識しています。しかし、他の SO の質問 ( here、here、および最終的には C++ faq ) への回答で、using
宣言が役立つ可能性があると言われました。
だから私は試しました。
テンプレート基本クラス:
ベースのメンバーを使用した派生クラス:
これを ideone で試しました。gcc-4.3.3 と gcc-4.5.1 があります
これは予想される動作ですか?親テンプレート クラスのメンバ typedef にアクセスするための「従属名」法をどのように回避すればよいでしょうか?