将不同的模板化类存储在同一个容器中

时间:2012-09-02 15:09:41

标签: c++ templates

我有以下课程:

template<unsigned int offsetX, unsigned int offsetY>
class myClass {
//several int and floats that are computed with offsetX and offsetY
//and other stuff
}

无论模板化参数是什么,其大小都相同。 我可以存储myClass&lt; 1,1&gt;的实例吗?和myClass&lt; 0,0&gt;等,在同一个容器中?我理解,当模板化的东西是一个类时,它是不可能的,但在这种情况下,类的布局总是相同的

编辑:我知道我可以将offsetX和offsetY发送给类的构造函数并且没有模板但是在这种情况下它们在编译时是已知的

3 个答案:

答案 0 :(得分:3)

为模板定义基类,其中将放置所有这些常见的整数和浮点数。

仅使用派生模板计算基本字段。然后,您可以将模板实例插入到使用基类定义的容器中。这称为对象切片。一般来说,这不是一件好事......

更好的方法是删除模板类并定义模板函数,这将完成模板工具已经完成的工作。

template <int x, int y> inline MyClass compute()
{…}

答案 1 :(得分:2)

不,你不能,因为类型不同。您可以使用公共基类并将smart pointers存储到其中,也可以存储boost::any

class MyBase { .... };

template<unsigned int offsetX, unsigned int offsetY>
class myClass : public MyBase{ .... };

然后

std::vector<std::unique_ptr<MyBase>> v;

v.push_back(std::unique_ptr<MyBase>(new myClass<1,1>()));
v.push_back(std::unique_ptr<MyBase>(new myClass<0,0>()));

答案 2 :(得分:0)

不,你不能。 myClass<1, 1>myClass<0, 0>类型无关。