問題タブ [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++ - テンプレート テンプレート パラメーターは、新しい C++ 標準でサポートされている関数に対してサポートされていますか?
本 C++ Template: The complete Guide で次のステートメントを見つけました。
関数テンプレートのテンプレート テンプレート パラメーターは使用できません。
しかし、彼は次のコードをコンパイルして実行します。
これは、新しい C++ 標準が関数のテンプレート テンプレート パラメーターをサポートするということですか? 次の投稿の答えは別のことを言っています: How to get template template argument deduction working with functions?
c++ - テンプレート テンプレート パラメーターを使用した引数推定
クラステンプレートがあります。const_iterator
このクラス テンプレート内で、sのコレクションでsを受け入れるメンバー関数テンプレートを定義しようとしていますstring
。コレクション自体は任意の種類の StdLib コレクションにすることができますが、現実的には か のいずれかになりvector
ますlist
。
コレクションは任意の型になる可能性があるため、template-template
パラメーターを使用してコレクションの型を指定しています。ただし、常に のコレクションになりstring
ます。メンバー関数を呼び出すときにコレクションの型を指定する必要がないように、テンプレートの引数推定が機能するようにします。
私の意図したユースケースに似た SSCCE に続くコード。
これまでのところ、クラス定義 ( Live Demo ) は次のとおりです。
クラス テンプレートのインスタンス化のコンパイルが成功します。
しかし、引数の演繹法を活用しようとすると (それがなければ、この演習全体はほとんど無意味です):
GCC は、テンプレート引数を推測できないと文句を言います。
最終的に、私が本当に気にかけているDoIt
のは、コレクションの begin および end イテレータで呼び出せることだけですstring
。コレクションの実際のタイプはvector
またはlist
のいずれかであり、テンプレート引数を指定する必要も、コンテナーに基づいてオーバーロードする必要もありません。
どうすればこれを機能させることができますか?
私の実際のユースケースは C++03 であることに注意してください。C++11 ソリューションは歓迎されますが、C++03 ソリューションのみを受け入れることができます。
c++ - 別のタイプのテンプレート化されたコンテナーを返すことはできますか?
このように動作する関数を作成するにはどうすればよいですか? 戻り値の型を正しく宣言できないようです。
c++ - テンプレート< テンプレートsomething_else >、これは何ですか?
私は C++11 の学習を始めたばかりで、新機能のリストにこの構文を見たことがありません。
それは何で、どのように機能しますか?
c++ - 型とテンプレート テンプレート パラメーターを使用したテンプレート クラスの型パラメーターの部分的な特殊化
型パラメーターとテンプレート テンプレート パラメーターを持つ、次のテンプレート クラスの型パラメーターを特化したいと考えています。
.template
次の各スニペットの最後の行にand /or を追加および/または省略して、すべての順列を試しtypename
ましたが、コンパイルされません。
1.)
2.)
3.)
4.)
それらのどれも機能しないのはなぜですか?
該当する各スニペットの最後の行について:
- クラス で使用される型であることが
typename
明確にされていないか、またはこの構文はのクラス定義の本体内でのみ使用できますか?E
Foo
{}
Bar
template
がテンプレートであることを明確にしないFoo
ため、コンパイラが「より小さい」Foo <
として解析するのを防ぎますか、またはこの構文はのクラス定義の本体内でのみ使用できますか?Foo
{}
Bar
どうすればこれを機能させることができますか?