の特殊なタイプのパラメータを取得している可能性のようなものです:はい、なぜ見つかった専門的なケースではない場合は、再帰的な可変長引数テンプレート
#include <iostream>
#include <string>
template<typename T1, typename T2, typename T3, typename T4, class ...Ts>
struct third_t {
typedef typename third_t<T2,T3,T4,Ts...>::type type;
};
template<typename T1,typename T2, typename T3>
struct third_t<T1,T2,T3,void> {
typedef T3 type;
};
int main() {
third_t<int,int,std::string,unsigned>::type z = "test";
std::cout<<"string type: "<<z<<std::endl;
}
?私。それは決議でも考慮されていません。
私はエラーを取得する:
main.cpp: In instantiation of 'struct third_t<int, int, std::__cxx11::basic_string<char>, unsigned int>':
main.cpp:18:46: required from here
main.cpp:7:56: error: wrong number of template arguments (3, should be at least 4)
typedef typename third_t<T2,T3,T4,Ts...>::type type;
アップデート:私は私の最初の偽の推定は、私はもちろん、同様「オーバーロード」クラス、である可能性があることを考えるように私を導いたことに気づい
ナンセンス。そのようなことは、関数テンプレートで行うことができるのに対して、テンプレートパラメータのうち、サード最後パラメータを抽出することが可能であったであろう場合
template<typename T1,typename T2, typename T3>
struct third_t { ... };
は、クラステンプレートで行うことができないということ。
おかげで、次のように、それは溶液でした。 – FloriHe
それにもかかわらず、私はこれをより一般的なものにする可能性について考えています。すなわち、醜い第4のvoidパラメータなしで。 – FloriHe
@FloriHe - しかし、まさに...あなたは何を得たいですか? – max66