c – 如何从可变参数类型的包中获取特定类型?

我希望做这样的事情:
template<typename ...T> struct foo
{
  bar<0 /*to index through types in pack*/,T...>::type var1;
  bar<1 /*to index through types in pack*/,T...>::type var2;
  ...
}

但是我怎么定义吧?这样做没有想到递归技术.

我想要一种通用技术,以便我可以从类型包中键入任何特定类型,而不仅仅是示例中显示的两种类型.

解决方法

#include <iostream>
#include <typeinfo>

template<class T,class T2,class... Args>
class C
{
public:
   typedef T type1;
   typedef T2 type2;
};

int main()
{
   typedef C<int,double,int,float> c;
   std::cout << typeid(c::type1).name() << " " << typeid(c::type2).name() << std::endl;
}

或者像这样的东西.

#include <iostream>
#include <typeinfo>

template<int N,class T,class... Args>
struct expand
{
public:
   typedef typename expand<N - 1,Args...>::type type;
};

template<class T,class... Args>
struct expand<1,T,Args...>
{
public:
   typedef T type;
};

template<class... Args>
class argsExpander
{
public:
   typedef typename expand<1,Args...>::type type1;
   typedef typename expand<2,Args...>::type type2;
};

template<class... Args>
class C
{
public:
    typename argsExpander<Args...>::type1 var1;
    typename argsExpander<Args...>::type2 var2;
};

int main()
{
   C<int,float> c;
   std::cout << typeid(c.var1).name() << " " << typeid(c.var2).name() << std::endl;
}

http://liveworkspace.org/code/7de289f128e86eb6006f576cbaf98991

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...