問題タブ [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 に答える
202 参照

c++ - テンプレート テンプレート パラメータで複数のテンプレート クラスをスローする - テンプレート バインディング?

次のクラスがあるとします。

次のようなコードを記述できるようになりました。

1つを除いてすべてのパラメータが指定されているマルチパラメータクラスをBに配置する最もエレガントな方法は何ですか? int キーを持つマップが好きですか? 私が思いつくことができる唯一のものはこれです:

パラメータの一部のみを提供し、そのうちの 1 つを開いたままにしておくことができる、std::bind に相当するテンプレートはありますか? 言語がこれを提供していないと確信していますが、人々は以前にこれを解決したに違いありません。

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

c++ - template-template 引数を使用した可変個引数テンプレートからの型のマージ

テンプレート テンプレートを介して渡される引数のリストを拡張しようとしています。最初の例は機能しますが、2 番目の例は機能しません。私が探している結果は、2 番目の例でcWapperObject.cMemberVariable.cTupleは typestd::tuple<double, float, short, int>です。どうすればこれを達成できますか?(そして、コメントや回答でライブラリブーストについて言及しないでください)。

例 1:

例 2:

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

c++ - template-template パラメーターによる列挙型を使用したオブジェクトのタグ付け

テンプレートの列挙型引数を使用して、2 番目の引数であるクラスを制限し、列挙型のメンバーをテンプレート化されたパラメーターとして引数として取得したいと考えています。コードでは、これは次のようになります。

ただし、これは機能するはずです。

ENotAnObjectTag::CAT_OTHERは の要素ではないため、失敗するはずですEObjectTag

これの私の実装(試み)は次のとおりであり、コンパイル中に(gccバージョン4.9.2(Ubuntu 4.9.2-10ubuntu13)で)エラーメッセージが表示されます。

source.cc:16:45: エラー: 'SUBOBJECT_TAG' はこのスコープ構造体 CObject で宣言されていません>

これの最後の使用例では、CSubObject を CObject に置き換えて、再帰を使用してタグ付きオブジェクトの階層を定義できるようにします。これには、可変個引数テンプレートを使用して同じレベルの複数のオブジェクトを含める必要もあります。例えば:

EBase (ライブラリ内部の列挙型) へのコメント アウトされた参照は、CObject のテンプレート パラメーターの一貫性を保つためにあります。(可能であれば) テンプレートの特殊化または既定の引数を介して自動的にこれを行う予定です。

このオブジェクトの階層を指定する私の目標には、さらに次のものが含まれます。

  1. このライブラリのユーザーに、プログラムで追加のクラスまたは構造体を定義することを強制しないでください
  2. 列挙型を使用して CObject をテンプレート化することにより、コンパイル時のチェックを活用します。列挙型の関数は、すべての CObject に共通の一連の関数の引数としてその列挙型を使用します。
0 投票する
1 に答える
1313 参照

c++ - libtooling を使用して完全修飾テンプレート テンプレート引数名を取得する

テンプレートテンプレートパラメーターを使用して、テンプレートクラスの実体化libtoolingを印刷するために使用しようとしています。CXXRecordDecl残念ながら、テンプレート テンプレート パラメータの文字列表現は完全修飾されていません (たとえば、名前空間がありません)。

私はCXXRecordDeclこのコードで印刷しています:

出力が になると予想される例を次に示しますが、次のns::A<ns::B>ようになりますns::A<B>

テンプレート テンプレート パラメータを使用してクラスの完全修飾名を出力するにはどうすればよいですか?

getCanonicalTypeInternal関連して、内部関数のように聞こえるを呼び出さずにこれを行う方法はありますか?

[編集 #1]decl->getQualifiedNameAsString()テンプレートの引数と出力を完全に省略したも試しましns::Aた。

[編集 #2] Cling は一連の問題を別の問題と交換します。テンプレート テンプレート パラメーターの完全修飾型を正しく生成します。ただし、関数 (および関数ポインター) の引数と戻り値の型の非修飾名が生成されます。たとえば、次のコードは、ns::A<void (B)>代わりに出力を生成しns::A<void (ns::B)>ます。

[編集 #3]上記の問題について、Cling イシュー トラッカーにイシューを投稿しました。ページを表示するには、CERN 軽量アカウントでサインインする必要があることに注意してください。アカウントの作成手順については、このページを参照してください。

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

c++ - 転送参照とテンプレート テンプレート

次の 2 つのテンプレート関数を検討してください。

なぜ前者は (転送参照を使用して) 左辺値を受け入れ、後者は受け入れないのですか?


ID エイリアス テンプレートを転送参照にすることはできますか? これにも関連している可能性がありますが、参照の転送に関する制限の別の側面をカバーしているようです.

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

c++ - テンプレートテンプレートパラメータを完全転送することは可能ですか?

パラメータを完全転送する方法を知っています。ただし、さまざまなソース (Effective Modern C++ Item 24 - Scott Meyers など) から、正確なテンプレート名がある場合にのみ完全転送できることを読みました。

私が探しているのは、テンプレート テンプレート パラメータを完全転送する方法があるかどうかです。

上記をコンパイルすると、「左辺値を右辺値参照にバインドすることはできません」(VC12) というエラー メッセージが表示されます。 . この完全な転送は、推測された TypeT と Size を利用できるので、私にとっては便利です。

質問: テンプレートのテンプレート パラメータを完全に転送することは可能ですか? もしそうなら、私の構文はどこが間違っていますか?

ありがとう!