問題タブ [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.

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

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>私が意味したものを得るでしょう

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

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&' を推測できません

問題は、右辺値参照を取る関数への引数の受け渡しにあるようです。しかし、最初のバージョンがうまく機能した理由がよくわかりません。テンプレート テンプレートを使用していることに注意してください。

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

c++ - テンプレートテンプレート関数とパラメータの控除

テンプレートテンプレートとパラメータの推定に問題があります。コードは次のとおりです。

私はこれが左辺値と右辺値のどちらかを受け入れることを期待していましたが、右辺値でのみ機能します。この場合、折りたたみルール「T &&& = T&」は適用されませんか?

当然、左辺値参照関数も宣言できますが、コードが読みにくくなります。

なぜこれが必要なのかを尋ねる場合は、static_assertを使用してTが特定のクラスであるかどうかを確認することです。もっと簡単な方法があれば、コードを変更させていただきますが、テンプレートテンプレートがこのように使用できるかどうかを知りたいと思います。

ありがとう

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

c++ - template-template パラメーターのエイリアスを定義することは可能ですか?

楽しみのために template-template を試しています。私は次のクラスを持っています:

タイプ とをメンバー型Rおよびとして定義しました。としてエイリアスすることは可能ですか?T<R>RatioFullTypeTType

上記のコメント行により、g++ 4.7 で次のエラーが発生します。

多かれ少なかれランダムな構文をいくつか試しましたが、コンパイルされたものはありませんでした。

ありがとう !

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

c++ - テンプレートテンプレートパラメータがどのように機能するかを完全に理解することができません

最新のC++デザインを読んでいて、テンプレートテンプレートパラメーターがどのように機能するかを完全に理解できませんでした。

たとえば、この記事http://www.informit.com/articles/article.aspx?p=376878 に示されているように、タイプとコンテナーのテンプレートパラメーターを使用してスタックを作成できます。

テンプレートスタックのパラメータとしてタイプとコンテナだけを使用すると、次のような問題が発生する可能性があります。

上記のコードでは、スタック要素タイプとコンテナ要素タイプの間で互換性のないタイプであるため、aStack1は問題なく、aStack2とaStack3が問題であることが理解できます。

記事によると、これはテンプレートテンプレートパラメータを使用すると解決できます

ここでの私の疑問は、Dequeがその要素タイプがstd :: stringまたはList要素タイプがintであることをどのように知ることができるかということです???これはテンプレート引数の推論によって行われますか?

ここでは、タイプTのDequeを作成しています。スタックを次のように定義した場合

次に、Stackをどのようにインスタンス化できますか

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

c++ - 異なる名前空間からのテンプレート テンプレート引数は友達になれますか?

この質問のタイトルが役に立たない場合はお詫び申し上げます。次の例を挙げずに、この質問をする簡潔な方法がわかりません。

ご覧のとおりArg2、 のコピーですArg1。ただし、VS 2008 ではArg1テンプレート引数としてのみ使用できます。

エラーは'C<Arg>::i_' : cannot access private member declared in class 'C<Arg>'です。i_公開すればすべてうまくいくので、これは友情の問題のようです.

テンプレート テンプレート引数が別の名前空間にある場合、友情宣言が失敗する原因は何ですか?

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

c++ - 型のリストではなく、テンプレート パラメーター リストに std::tuple を使用する

次のようなテンプレート化された関数を呼び出そうとしています:

タプルの型を「単純に」渡すことができることはわかっています。これは私が知っていることですが、この関数を何度も呼び出し、タプルが非常に長いため、非常に面倒です。

だから私は get メソッドの複数の実装を試みましたが、成功しませんでした:

テンプレート パラメーターによる有効化

これは私にこのエラーを与えます:

テンプレート パラメータが欠落している理由がわかりません。

だから私は別の実装を試しました:

テンプレート - テンプレートという名前のパラメーター

しかし、私はこのエラーが発生します:

繰り返しますが、識別子の欠落によるエラーがわかりません。

私が達成したいことが可能であるかどうか、私は今疑問に思っています。好きなように使えstd::tupleますか?それとももっと良い方法がありますか?

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

c++ - C ++のテンプレートでクラスを非型引数として渡す

私が調査したテンプレートでは、整数の引数、つまりint、他のデータ型へのポインター、およびテンプレートテンプレートパラメーターのみを持つことができます。

しかし、ここでは単純なクラスをテンプレート引数としても渡すことができます。これは有効ですか、それとも私が理解していることは間違っています。これがコードの一部です。

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

c++ - タプルからクラスを派生させる

次のように指定された std::tuple があります。

ここで、t3_tuple を同様のタプルに変換したいと思います。

私の場合、たとえば、t1t2、およびt3はプリミティブであり、Tstd::stackです。一般に、などがあるかもしれないと仮定しt4ます。

Tもちろん、私の 2 番目の定義は既に問題を解決していますが、導出を自動化したいと考えtuple_tていますderived_tuple_t。このような:

このようなことは可能ですか?多分短い解決策?

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

c++ - boost::enable_shared_from_this からテンプレート テンプレート クラスを派生させる方法は?

boost::enable_shared_from_this からテンプレート化された型のテンプレート クラスをどのように派生させることができますか?

これはコンパイルされませんでした:

エラー: 'Myclass' はテンプレート タイプではありません。