是否可以在c++;? 是否可以在C++中创建一个类型的向量?< /p>

是否可以在c++;? 是否可以在C++中创建一个类型的向量?< /p>,c++,c++11,C++,C++11,也许c++11中的decltype可以用于此目的 我需要这个,这样我可以迭代这个向量,取类型, 这就是类,并创建这样一个实例。您可以创建工厂模板: class BaseFactory { public: virtual void* create() const = 0; }; template <typename T> class Factory :public BaseFactory { public: T* create() const { re

也许c++11中的decltype可以用于此目的

我需要这个,这样我可以迭代这个向量,取类型,
这就是类,并创建这样一个实例。

您可以创建工厂模板:

class BaseFactory {
public:
    virtual void* create() const = 0;
};

template <typename T>
class Factory :public BaseFactory {
public:
    T* create() const {
        return new T();
    }
};
类基工厂{
公众:
虚空*create()常量=0;
};
模板
类别工厂:公共基础工厂{
公众:
T*create()常量{
返回新的T();
}
};

并将这些工厂实例存储在向量中。然而,我看不出它有多大用处。要简单地将类型存储在向量中,请查看boost。

您不能用简单的方法来实现这一点,但可以有一些变通方法。我不在C++ 11中(我的IDE不支持它,我不能改变它),但是对于旧的C++,你可以使用<代码> Type ID(a).NAMEL()/Cuffe >,其中<代码> A<代码>是一个变量。您可以将函数的结果存储在
向量中
,然后使用if-else构造创建变量

或者-如果您只想初始化类的变量,则从
Base
类派生它们,该类具有返回类类型标识符的函数:

class Base{
   int classId;
public:
   Base(){classID=0;};
   virtual int myType(){return classID;};
};

class Derived1: public Base{
public:
   Derived1(){classID=1;};
等等。然后使用
开关
语句创建对象:

vector<int> types;

// Populate the vector somewhere here

for(unsigned int i=0;i<types.size();i++){
   Base* newObject;
   switch(types[i].myType()){
   case 0:
      newObject = new Base;
      break;
   case 1:
      newObject = new Derived;
      break;
   default:
      newObject = 0;
   }
}
向量类型;
//在这里的某个地方填充向量
对于(unsigned int i=0;i什么是“类型向量”——向量包含数据值,而不是类型,所以这个问题没有多大意义

您可以创建类型的元组(元组有点像类型的向量,而不是值):

typedef std::tuple mytype;//typedef是一种元组类型
mytypefoo(4,3,2.0,“hello”);//创建一个实例
double x=get(foo);//从该实例获取一个值
get(foo)=7;//更改该实例中的值
<>这是非常静态的,因为你不能动态地改变一个变量的类型,所以一旦你创建了一个元组类型的实例,它的类型(以及它的元素的数量和类型)是固定的。但是,工厂函数都需要相同的签名,并且需要返回某种指向基类的指针

//工厂函数
//它们都不接受参数并返回指向形状的指针
唯一的_ptr CreateCircle();
唯一的_ptr CreateSquare();
唯一的_ptr CreateTriangle();
标准::向量工厂向量=
{
&CreateCircle,
&CreateSquare,
&CreateTriangle
};
//现在可以在factoryVector上迭代,对每个元素调用()操作符
//并生成指向圆、正方形和三角形的形状指针
//三角

在编译时?在运行时?Noop.在回答你的问题时,你被告知这是不可能的。如果你需要思考,你应该使用一种有反射的语言。C++没有。也不知道Type认为这里有更多的上下文会有帮助,这是“类型的向量”。来自这个输出类实例,你想用它做什么?这些类都是多态的,有一个共同的基类吗?元组也不存储类型。它们也存储值。@BenjaminLindley:是的,但提出的问题是毫无意义的。“类型”是一个编译时概念,所以“存储”它们在运行时是没有意义的。@BenjaminLindley,但您不能推断
std::tuple
(在编译时)的某个索引的类型吗嗯,在某些语言中是有道理的。对于某人怀疑它在C++中可能也是不合理的。我们不能期望每个问C++的人都成为C++专家。
typedef std::tuple<int, int, double, std::string> mytype; // typedef a tuple type
mytype foo(4, 3, 2.0, "hello");   // create an instance
double x = get<3>(foo);           // get a value from that instance
get<2>(foo) = 7;                  // change a value in that instance
// factory functions
// all take no parameters and return a pointer to a shape
unique_ptr<Shape> CreateCircle();
unique_ptr<Shape> CreateSquare();
unique_ptr<Shape> CreateTriangle();

std::vector<std::function<unique_ptr<Shape>()>> factoryVector = 
{
    &CreateCircle,
    &CreateSquare,
    &CreateTriangle
};

// You can now iterate over factoryVector, invoke the () operator on each element
// of the vector, and generate a Shape pointer that points to a Circle, Square, and
// Triangle