ли что-то подобное можно:Получить специальный параметр типа рекурсивного VARIADIC шаблона
#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
Тем не менее, я думаю о возможности того, как я могу сделать это более общим, т. Е. Без уродливого четвертого параметра void – FloriHe
@FloriHe - но точно ... чего вы хотите получить? – max66