問題タブ [template-templates]
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++ - VC++ Variadic-Template-Template エラー C2244: 関数定義を既存の宣言と一致させることができません
これはおそらく newb のエラーです。私は Microsoft Visual C++ Compiler Nov 2012 CTP を使用しており、これをコンパイルしようとすると:
次のエラーが表示されます。
関数をインライン化すると、コンパイルしてやりたいことを実行しますが、関数をヘッダーファイルに配置する必要があります
ただし、次のコードはエラーなしでコンパイルされます。
問題は、どうすれば可変個引数テンプレートで同じことを達成できるかということです
編集:
提案されたように、Microsoft Connect にID :771567でバグ レポートを提出しました。
また、ベクトルの例は悪いものでした (それは を与えます<std::_Simple_types<int>,std::_Vector_val>
が、コンパイルはします) が、ペアとテンプレート引数で試してみると:
あなたは<F,G,std::pair>
私が意味したものを得るでしょう
c++ - 可変個引数テンプレート テンプレートを使用した型推定と引数の受け渡し
少し前に、可変個引数テンプレートのおかげで、Python の chain 関数に相当する C++ を実装しました。この関数は、多くのコンテナーを連続して反復処理するために使用されます。ChainedObject
これは、名前が何であれ、という名前のジェネレーターを使用した関数の古い作業バージョンです。
そして対応するメイン:
そのメインはうまくいきました。問題の ChainObject に何があるかは気にしないので、見てみましょう。テンプレート テンプレートを使用して、使用されるさまざまなコレクションが同じであることを確認しvalue_type
、関数chain
を次のように変更しようとしました。
list
これにより、以前のメイン共有のandが同じ型を共有するようにするためのトリックが行われると考えましたvector
が、代わりに、GCC 4.7.1 から次のエラーが発生します。
関数 'int main()' 内:
エラー: 'chain(std::vector&, std::list&)' の呼び出しに一致する関数がありません
注: 候補は次のとおりです。
注:
ChainObject<T, Iterables ...> chain(Iterables<T>&& ...) [with T = int; Iterables = {std::vector, std::list}
]注: ' ' から ' ' への引数 2 の既知の変換はありませ
std::list<int>
んstd::list<int>&&
ノート:
ChainObject<T, Iterables ...> chain(Iterables<T>&& ...) [with T = int; Iterables = {std::vector, std::list}]
注: ' ' から ' ' への引数 2 の既知の変換はありませ
std::list<int>
んstd::list<int>&&
エラー: '' から 'auto&' を推測できません
問題は、右辺値参照を取る関数への引数の受け渡しにあるようです。しかし、最初のバージョンがうまく機能した理由がよくわかりません。テンプレート テンプレートを使用していることに注意してください。
c++ - テンプレートテンプレート関数とパラメータの控除
テンプレートテンプレートとパラメータの推定に問題があります。コードは次のとおりです。
私はこれが左辺値と右辺値のどちらかを受け入れることを期待していましたが、右辺値でのみ機能します。この場合、折りたたみルール「T &&& = T&」は適用されませんか?
当然、左辺値参照関数も宣言できますが、コードが読みにくくなります。
なぜこれが必要なのかを尋ねる場合は、static_assertを使用してTが特定のクラスであるかどうかを確認することです。もっと簡単な方法があれば、コードを変更させていただきますが、テンプレートテンプレートがこのように使用できるかどうかを知りたいと思います。
ありがとう
c++ - template-template パラメーターのエイリアスを定義することは可能ですか?
楽しみのために template-template を試しています。私は次のクラスを持っています:
タイプ とをメンバー型R
およびとして定義しました。としてエイリアスすることは可能ですか?T<R>
Ratio
FullType
T
Type
上記のコメント行により、g++ 4.7 で次のエラーが発生します。
多かれ少なかれランダムな構文をいくつか試しましたが、コンパイルされたものはありませんでした。
ありがとう !
c++ - テンプレートテンプレートパラメータがどのように機能するかを完全に理解することができません
最新のC++デザインを読んでいて、テンプレートテンプレートパラメーターがどのように機能するかを完全に理解できませんでした。
たとえば、この記事http://www.informit.com/articles/article.aspx?p=376878 に示されているように、タイプとコンテナーのテンプレートパラメーターを使用してスタックを作成できます。
テンプレートスタックのパラメータとしてタイプとコンテナだけを使用すると、次のような問題が発生する可能性があります。
上記のコードでは、スタック要素タイプとコンテナ要素タイプの間で互換性のないタイプであるため、aStack1は問題なく、aStack2とaStack3が問題であることが理解できます。
記事によると、これはテンプレートテンプレートパラメータを使用すると解決できます
ここでの私の疑問は、Dequeがその要素タイプがstd :: stringまたはList要素タイプがintであることをどのように知ることができるかということです???これはテンプレート引数の推論によって行われますか?
ここでは、タイプTのDequeを作成しています。スタックを次のように定義した場合
次に、Stackをどのようにインスタンス化できますか
c++ - 異なる名前空間からのテンプレート テンプレート引数は友達になれますか?
この質問のタイトルが役に立たない場合はお詫び申し上げます。次の例を挙げずに、この質問をする簡潔な方法がわかりません。
ご覧のとおりArg2
、 のコピーですArg1
。ただし、VS 2008 ではArg1
テンプレート引数としてのみ使用できます。
エラーは'C<Arg>::i_' : cannot access private member declared in class 'C<Arg>'
です。i_
公開すればすべてうまくいくので、これは友情の問題のようです.
テンプレート テンプレート引数が別の名前空間にある場合、友情宣言が失敗する原因は何ですか?
c++ - 型のリストではなく、テンプレート パラメーター リストに std::tuple を使用する
次のようなテンプレート化された関数を呼び出そうとしています:
タプルの型を「単純に」渡すことができることはわかっています。これは私が知っていることですが、この関数を何度も呼び出し、タプルが非常に長いため、非常に面倒です。
だから私は get メソッドの複数の実装を試みましたが、成功しませんでした:
テンプレート パラメーターによる有効化
これは私にこのエラーを与えます:
テンプレート パラメータが欠落している理由がわかりません。
だから私は別の実装を試しました:
テンプレート - テンプレートという名前のパラメーター
しかし、私はこのエラーが発生します:
繰り返しますが、識別子の欠落によるエラーがわかりません。
私が達成したいことが可能であるかどうか、私は今疑問に思っています。好きなように使えstd::tuple
ますか?それとももっと良い方法がありますか?
c++ - C ++のテンプレートでクラスを非型引数として渡す
私が調査したテンプレートでは、整数の引数、つまりint、他のデータ型へのポインター、およびテンプレートテンプレートパラメーターのみを持つことができます。
しかし、ここでは単純なクラスをテンプレート引数としても渡すことができます。これは有効ですか、それとも私が理解していることは間違っています。これがコードの一部です。
c++ - タプルからクラスを派生させる
次のように指定された std::tuple があります。
ここで、t3_tuple を同様のタプルに変換したいと思います。
私の場合、たとえば、t1
、t2
、およびt3
はプリミティブであり、T
はstd::stack
です。一般に、などがあるかもしれないと仮定しt4
ます。
T
もちろん、私の 2 番目の定義は既に問題を解決していますが、導出を自動化したいと考えtuple_t
ていますderived_tuple_t
。このような:
このようなことは可能ですか?多分短い解決策?
c++ - boost::enable_shared_from_this からテンプレート テンプレート クラスを派生させる方法は?
boost::enable_shared_from_this からテンプレート化された型のテンプレート クラスをどのように派生させることができますか?
これはコンパイルされませんでした:
エラー: 'Myclass' はテンプレート タイプではありません。