1

我有以下课程:

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

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

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

4

3 回答 3

3

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

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

最好是删除模板类并定义模板函数,该函数将完成您的模板 c-tor 已经完成的工作。

template <int x, int y> inline MyClass compute()
{…}
于 2012-09-02T15:22:45.723 回答
2

不,你不能,因为类型不同。您可以使用通用基类并存储指向它的智能指针,或存储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>()));
于 2012-09-02T15:13:36.290 回答
0

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

于 2012-09-02T15:13:10.830 回答