問題タブ [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++ - C++ テンプレート テンプレートに関するヘルプ
わかりましたので、stl のようなアルゴリズムを書きましたcartesian_product
。ご存じない方のために説明すると、デカルト積は 2 つのセットから可能なすべての要素のペアです。{1, 2, 3}
したがって、とのデカルト積{10, 20, 30}
は
{(1,10), (1,20), (1,30), (2,10), (2,20), (2,30), (3,10), (3,20), (3,30)}
したがって、関数は次のようになります
テンプレートの typedef がないため、出力反復子の元になる型を保持するための特性クラスを作成しました。
だから私は言うことができます:
しかし、これはコンパイルされていないようです。私は素晴らしいエラーを受け取ります:
だから私は困惑しています。これを機能させるにはどうすればよいですか?
c++ - 部分的なテンプレートの特殊化: 特殊化されたテンプレート パラメーターのプロパティの照合
の通常のテンプレートになるが、特殊化になるA
ような部分的な特殊化を定義する方法はありますか?A<C, B<P1> >
A
A<C, B<P2> >
Marcelo に応じて編集: より具体的には、特殊化は B だけでなく、特定のプロパティを示す任意の型で選択する必要があります。たとえば、最初の引数が P2 であるテンプレートです。
目標は、 を使用して のようなものを記述できるようにするY
ための優れたインターフェイスを提供することです。A
A<C, Y<P2,Q> >
テンプレート パラメータをテンプレート テンプレート パラメータに置き換えるのはY
いいことですが、それに基づいて部分的に特殊化する方法はありP
ますか?
意図は次のようなものを書くことです:
In silico に応じて編集: テンプレート テンプレート パラメーターを作成するのはいいことだと言いましたが、実際には、論理的にリンクされたプロパティをグループ化するために使用することですが、1 つに基づいて専門Y
化するという、私がやりたかったことの目的を無効にします。それらのサブプロパティの。Y
A
特殊化に特性を追加してからtemplate <> class B<P2>
SFINAE を使用する方法はありA
ますか? 意図は次のようなものを書くことです:
c++ - 自分自身をテンプレート テンプレート パラメータとして参照するテンプレート クラスですか?
このコード:
はのスコープ内でA<B>
あると解釈されるため、コンパイルされません。A<B<T> >
B
B
では、そのスコープ内でテンプレート テンプレート パラメータとしてどのように渡すのでしょうか?
c++ - テンプレートのテンプレート引数の使用で不合理なエラーが発生する
Test2
私は 2 つのテンプレート引数を取るテンプレート化された class( ) を作成しようとしていType1
ますType2
。2 番目の引数も、2 つのテンプレート引数 (TypeA
およびTypeB
) を取るテンプレート化されたクラスになることが知られています。
ここで、 のオブジェクトを作成するためにTest2
、ユーザーが 2 種類のコンストラクターのいずれかを使用できるようにしたいと考えています。
Type1
とのオブジェクトを取るものType2
。Type1
、TypeA
およびのオブジェクトを取るものTypeB
。
次のコードを書きました。
私は多くのことを試しましたが、次のような非常にばかげたエラーが発生します。
wrong number of template arguments (1, should be 2)
17号線と20号線で。
c++ - 両方のメンバーがパラメーター化された後でのみ、テンプレート テンプレート パラメーターを使用したビルド エラー
以前のテンプレート パラメーターのサブタイプと等しい型の非型値であるテンプレート テンプレート パラメーターを渡そうとしています (これは読むのと同じくらい難しいことです!)、結果を単一のパラメーター化されたテンプレートに結合しようとした後、いくつかのビルド エラーが発生しました。
次のコードがあります (g++ 4.4.1 および -std=c++0x で問題なくコンパイルされます)。
ただし、Now
テンプレートを見てください。ブール値によってパラメーター化された 2 つのメンバーがあります。ただし、囲んでいるテンプレートconcrete_t
の bool パラメータに依存しますが、依存しません。それを変更したいので、宣言を次のように置き換えます。Now
MyHold
Now
しかし、これにより次のエラーが発生します。
私はこれを十分に見つめてきましたが、この単純な変更がエラーを引き起こす理由を完全に理解できていないと言わざるを得ません。何か案は?
編集:これは(うまくいけば)熟考しやすくするための問題の最小限の説明です:
c++ - テンプレート テンプレート パラメーターは、以前のパラメーターから解決されたパラメーターを受け取ることができるようにする必要がありますか?
g++ 4.4 および 4.5 で奇妙な問題を発見しました。コードでばかげたエラーを起こしていると思ったので、これについて尋ねました。元の投稿はここにありますが、投稿を完了するために、問題のある問題のあるコードをここに再投稿します。
これは実際にはプログラマーのエラーではないように思われますが、テンプレートのテンプレート パラメーター解決に関するあいまいなルールが欠落している可能性はあるかもしれません。ただし、バグをubuntuトラッカーに投稿しようとしました(うまくいけば、バグを却下するか、バグを上流に送信します)
それで、これが本当にバグかどうかを確認するためだけに、私は 2003 年標準のコピーを手に入れました。セクション 14.3.3 を数回読みましたが、合格したかどうかのわずかな手がかりを見落としていると感じています。サンプル コードのようなパラメーターを持つテンプレート テンプレート パラメーターは許可または禁止されます。ドキュメントのこの部分がこれについて何か言及しているかどうかさえわかりません
これが私の質問です。これがどこに指定されているか知っていますか?
編集: この質問が 1 週間以上回答されていないことは非常に興味深いことです: 以前のテンプレート パラメーターを使用して後続のテンプレート パラメーターの型を指定できるかどうか (少なくともそれは基本的に実装者の決定に委ねられています
2 番目の編集 (2011 年 10 月 1 日): 人々、これにはおそらく私たち全員が見逃している何かがあります (または、多くの熟練したコンパイラ設計者が間違っています): Intel C++ コンパイラ XE 12.0 でこれを試したところ、次のようになりました:
c++ - テンプレート テンプレート パラメータ クラスを SWIG でラッピングする
次のような C++ クラスがあります。
SWIGでラップしようとしています。私の MyClass.i は次のようになります。
ただし、SWIG はテンプレートのテンプレート パラメータに問題があるようです。コンパイルすると、次のエラー メッセージが表示されます。
生成されたコードのその行を見ると、次の行が含まれています。
このクラスのインスタンス化には SimpleContainer の ContainterType が必要であると伝えたにもかかわらず、何らかの理由でダミーのテンプレート名をそのままクラスの名前として使用しています。
このバグを回避する方法はありますか? SWIGトラッカーでそれについての言及を見つけましたが、最後の投稿で言及された回避策を理解できませんでした。また、バグは4歳です。
openSUSE 11.4 で SWIG 1.3.40 と GCC 4.5.1 を使用しています。
c++ - 可変個引数テンプレートテンプレートと完全な転送
オブジェクトジェネレータパターンに関するこの質問は、それを自動化する方法について考えさせられました。
std::make_pair
基本的に、のような関数の作成を自動化std::bind1st
したいstd::mem_fun
ので、テンプレートクラスタイプごとに異なる関数を作成する代わりに、すべてのケースを一度に処理する単一の可変個引数テンプレートテンプレート関数を作成できます。この関数の使用法は次のようになります。
この関数を書くことは可能make
ですか?これを試しましたが、GCC4.5または4.6では機能しません。
電話をかけようとすると(例make<std::pair>(1, 2)
)
ここのどこかで構文が間違っていますか?
それとも、これは正しく、GCCは間違っていますか?
それとも、これはC ++ 0xでは基本的に不可能ですか?
[編集]
提案N2555は、これが許可されていることを示唆しているようであり、GCCはGCC4.4でそれを実装したと主張しています。
c++ - 関数テンプレートテンプレートパラメータのようなものはありますか?
したがって、C ++には「テンプレートテンプレートパラメータ」と呼ばれる機能があり、クラステンプレートをテンプレートパラメータとして渡すことができます。例えば:
関数テンプレートに類似したものはありますか?つまり、関数テンプレート(たとえばstd::make_pair
)をテンプレートパラメータとしてクラスに渡す方法はありますか?