テンプレートメタプログラミングを使用して、パラメータパック内の指定されたインデックスで型を取得しようとしています。私は以下のコードを持っていますが、何らかの理由で常にint
が返ってきます。テンプレートの特殊化を展開する方法
#include <string>
#include <iostream>
using std::cout;
using std::endl;
using std::string;
template <int current_index, typename... Vs>
struct TypeForIndex {};
template <int current_index, typename Head, typename... Tail>
struct TypeForIndex<current_index, Head, Tail...> : private TypeForIndex<current_index + 1> {
using type = Head;
};
template <int current_index, typename Tail>
struct TypeForIndex<current_index, Tail> {
using type = Tail;
};
int main() {
TypeForIndex <2, int, double, string>::type a {"hello"};
cout << a << endl;
return 0;
}
上記のコードはa
の型としてstring
を返す必要が何とかそれは常にint
上記のものであれば交換などのみの修正である 'TypeForIndex <2、int型、ダブル、文字列> :: type'が' STRING'が修正ですとします。http://coliru.stacked-crooked。com/a/d2876707b8677e26 - 正しいタイプを返しますが、正しくありません。このリンクでは、パックの最後に 'char'型を追加して、コードをコンパイルできませんでした。 – Yakk
はい。コンパイルするまでコードを編集していただけです。私は彼がさらに多くの間違いを抱えていることに気付かなかった。私は欠けている 'Tail ... 'をコードに追加しました。 – prestokeys
@prestokeysあなたの答えをありがとう!あなたのものは私にとってちょうど意味がありましたが、私は先に進んでより良い説明があるので、ヤックの答えを受け入れるつもりです。私は15ポイントをあなたにupvoted! – Curious