これはVector of pairs with generic vector and pair type, template of templateのフォローアップです。stxx :: vector for std :: vectorの代替としてのStxxlベクター
私はstd::vector
またはstxxl:vector
のメソッドを呼び出すことができますが、vector
(x、yのペア)のテンプレート引数が指定されています。
具体的方法のsignatrueは、次のようになります。このような署名を指定するとき
template<typename t_x, typename t_y,
template<typename, typename> class t_pair,
template<typename...> class t_vector>
method(t_vector<t_pair<t_x,t_y>> &v)
残念ながら、stxxl:vector
t_vector
としてを渡すことはできません。それは以下のコンパイルエラーにつながる:
sad.hpp:128:5: note: template argument deduction/substitution failed:
program.cpp:104:52: error: type/value mismatch at argument 1 in template parameter list for ‘template<class ...> class t_vector’
method(coordinates);
^
program.cpp:104:52: error: expected a type, got ‘4u’
program.cpp:104:52: error: type/value mismatch at argument 1 in template parameter list for ‘template<class ...> class t_vector’
program.cpp:104:52: error: expected a type, got ‘2097152u’
質問はstd::vector
を使用してコードを既存のドロップイン置換としてstxxl::vector
を使用することができるようにするために、メソッドのシグネチャを変更する方法ですか?
ベクトルにネストされたテンプレートを使用している理由を更新してください: 私は間違っているかもしれませんが、前述の方法で変数を入力するコンパイラが必要です。
私は例えばペア要素の種類に応じて、天気をuint32_t or uint64_t
のいずれかである必要がありvector
またはqueue
std::vector<t_x> intervals(k * k + 1);
typedef std::tuple<std::pair<t_x,t_y>,std::pair<t_x,t_y>, std::pair<t_x,t_y>, uint> t_queue;
std::queue <t_queue> queue;
を構築していますuint32_t or uint64_t
なぜ、そのようなテンプレートパラメータを指定する必要がありますか?単純な 'typename t_vector'を他のすべてのパラメータなしで使用するのはなぜですか?このテンプレートパラメータを使用してさまざまな型を構築する場合、テンプレートテンプレートパラメータを持つことは有益ですが、あなたの場合は 't_pair'という1つの型だけを使用します。 – Holt
私はペアのテンプレートパラメータとしてuint32_tとuint64_tを使用しています。私は32/64ビット整数を使うべきかどうかを私のコードでt_x/t_yを使って決めています。 –
私はあなたが単純なフォームとは違うやり方でテンプレートを持っているのがなぜあなたに役立つのでしょうか?このようなテンプレートパラメータが必要な理由(なぜ、より単純なフォームがあなたのために機能しないのか)を正確に示すために質問を更新できますか? – Holt