問題タブ [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++ - 名前付きパラメーターをテンプレート テンプレート パラメーターに使用する方法はありますか
foo
template-template パラメーターを使用してテンプレート関数を定義する必要がある場合、通常は次のようにします。
template-template パラメーターのテンプレート パラメーターには名前が付いていませんが、このパラメーターに名前を割り当てることができます。
関数でパラメーターを参照できないため、これはまったく役に立たないINNER
ようです。上記のコードは次のエラーを生成します。
エラー: 'INNER' は型を指定していません
型に名前を付けるためにキーワードがそこにあるのに、 がtypename INNER
型に名前を付けていないのは驚きです。typename
とにかく、これは簡単に修正できます。
しかし、結局のところ、INNER
パラメーターに名前は必要ありません。
そして (私の前に既にお気付きだと思いますが) template-template パラメーターのパラメーターの名前は無視されます! そうでない場合は、 の 2 番目のテンプレート パラメーターと名前が競合する必要があるため、無視されたことは確かfoo
です。
template-template パラメーターのパラメーターの名前が無視される別の例:
指定された型T
は、template-template パラメーターと template-template 自体によって同時に使用されていますか? 私はそうは思いません.template-templateパラメータへの名前は私の知る限り無視されます.
それで、質問は何ですか?
- 私の推測は正しいですか?template-template パラメーターの名前付きテンプレート パラメーターの名前は無視されますか?
- 私が間違っていて、全体を誤解している場合、名前付きパラメーターを template-template パラメーターに使用することはできますか? 役に立つ例をいくつか挙げていただけますか?
#2の有用な例については、template-template パラメーターの名前付きテンプレート パラメーターを使用してのみ達成できるものを参照しています。
c++ - template-tempate パラメーターを使用してテンプレートを特殊化する方法
最後に編集
テンプレートを取る関数があります:
これまでにテストしたどの種類のテンプレートでもうまく機能します。
しかし、2 つのパラメーターを持つテンプレートを受け取る場合にテンプレートを特殊化したい場合、以下のコードは機能しません。
私の知る限り、他のタイプのテンプレートパラメーターを使用すると非常に簡単です。
template-template テンプレートを使用してこの機能を実現するにはどうすればよいですか?
編集:
orlpとangew関数テンプレートで指摘されているように、部分的に特殊化することはできないため、オブジェクト テンプレートに固執する必要があります。これが私の試みです。
できます:
しかし今は、コンパイラーにすべてを推測させるのではなく、すべてのパラメーターを指定する必要があります... それは悲劇ではありません。
c++ - 2 つのテンプレート テンプレート パラメータで共有テンプレート変数を指定する方法は?
ミニテストフレームワークを構築しようとしています。同じ型で構成される 2 つのリストのような変数を受け取る 1 つの関数があり、インターフェイスの一部としてテンプレート テンプレート パラメーターを使用する予定です。これまでのところ、私はこれを持っています、
assertEquals
if 条件の は別の関数です。私の質問は、インターフェイスは正しいですか? 第二に、それをどのように使用しますか?私はこれを無駄に試しました、
Test::
は関数が存在する単純なクラスでありhaystack
、needle
型はstd::vector<int>
です。
c++11 - 型エイリアスでテンプレート テンプレート パラメータにアクセスする方法は?
型エイリアス内でテンプレート テンプレート引数を使用することは可能ですか? たとえば、次のような型エイリアスを書くことは可能ですか?
std::tuple などを指定すると、そのタイプを他の何かに使用するものはどれですか? GCC と Clang の両方がエラーでクラス テンプレートについて言及していますが、クラス テンプレートを必要としないようにするにはどうすればよいですか? ...s をすべて削除すると、GCC エラーは次のように変わります。
わかりません。コンテナー自体はテンプレートである必要はありませんが、代わりに std::tuple を使用する方法がわかりませんでした。
nms の回答に基づいて更新します。正しい形式は次のとおりです。
同様に、型がコンテナー内にある場合でも:
少し冗長なコードがありますが、十分なはずです。
c++ - C++ でのテンプレート テンプレート パラメータの変更
テンプレート パラメーターとして渡される型のバリアントである内部型を作成するクラスを設計したいと考えています。次のような非機能的な例:
Base
は完全に指定された型であるためBase<RefinedType> refinedStorage;
、コンパイルに失敗します。洗練された型は、ネストされたテンプレートのパラメーターとその基本型に基づく必要があるため、テンプレート テンプレート パラメーターを使用するだけでは機能しません。
テンプレート パラメーターの完全に指定された型と基本型の両方に基づいて型を作成するこのパターンを実装するにはどうすればよいですか?
編集:これは、変換のカスケードを実行する複数のインジェクタータイプを備えた、任意の深さのコンポジットにしたいと考えています。したがって、テンプレート テンプレート パラメーターとベース パラメーターの両方を渡すことはかなり扱いにくくなり (特に、コンポジットのベース ケースを処理する場合)、理想的な解決策はより直接的な構文を使用することです。
c++ - テンプレート テンプレート パラメータが標準の一部になったのはいつですか?
Modern C++ Designのセクション 1.5.2 から、この本の執筆時点では、テンプレート テンプレート パラメーターがコンパイラによって広くサポートされていなかったことがわかります。この機能が標準の一部になったのはいつですか?
c++ - この C++ テンプレートがどのように機能するのか理解できません
ライブラリのソースコードを読んでいます。しかし、このテンプレート定義がどのように機能するのか理解できません:
Use<> テンプレートを使用してクラスを宣言する方法は次のとおりです。
Use<> テンプレート定義には、不明な型 A と T が 2 つあります。
vcg::Use<MyVertex>::AsVertexType
例として、 A はMyVertexだと思いますが、T は何ですか?
補足
テンプレートの UsedTypes の定義は次のとおりです。
そして一連の Arity テンプレート定義。数学的帰納法のようなものです
テンプレート パラメーター T が何であるかを判断するのはまだ困難です。