わかりました、私は私の問題の簡単な例を与えるつもりだ:テンプレートパラメータを別のテンプレートに渡すことができないのはなぜですか?
void Increment(Tuple<int, int>& tuple) {
++tuple.Get<0>();
}
int main() {
Tuple<int, int> tuple;
tuple.Get<0>() = 8;
Increment(tuple);
printf("%i\n", tuple.Get<0>()); // prints 9, as expected
return 0;
}
これはうまくコンパイルし、すべてが桃です。 Increment関数は、タプルの最初の要素をインクリメントし、その要素を出力します。しかし、私のIncrement関数をどのような要素でも使用できるのであればいいとは思いませんか?
template <typename T>
void Increment(Tuple<T, T>& tuple) {
++tuple.Get<0>(); // <-- compile ERROR
}
int main() {
Tuple<int, int> tuple;
tuple.Get<0>() = 8;
Increment<int>(tuple);
printf("%i\n", tuple.Get<0>());
return 0;
}
私の第二の例は、コンパイル時に以下のエラーを吐く:
error: expected primary-expression before ')' token
私は、これが問題を起こす理由を理解しようと、私の知恵の終わりです。テンプレートパラメータは 'int'なので、生成されたコードはと同じです。ハードコードされた例と同じです。これをどのように機能させることができますか?
醜さとtrickinessはおそらくタプルが自由 'GET'機能持ちのstdとの両方後押しする理由です:' ++ <0>(タプル)を取得します。 ' – UncleBens