我有几个类来描述一些形状。
class Line {
private:
double _x;
public:
Line(double x) : _x(x) { }
virtual std::size_t size() const { return 1; }
};
class Quad : public Line {
private:
double _y;
public:
Quad(double y) : _y(y) { }
virtual std::size_t size() const { return 2; }
};
class Hexa final : public Quad {
private:
double _z;
public:
Hexa(double z) : _z(z) { }
std::size_t size() const { return 3; }
};
形状工作者使用我的形状。
class Quad_Worker : public Worker<Quad> {
// Implements Worker::do_something.
do_something(Quad some_shape) const;
};
template<class Shape>
class Worker {
virtual do_something(Shape some_shape) const = 0;
};
我想使用形状的大小来创建一个固定的(在编译时)数组。如何将size()
函数用作constexpr
?我尝试将构造函数转换为constexpr
,但这不起作用,因为Line
和Quad
的析构函数是虚拟的。
我应该使用静态成员方法或变量吗?
我正在使用C ++ 11。
感谢任何反馈。谢谢。
答案 0 :(得分:0)
在每个班级中加上这样的东西:
enum { static_size = 1 };
显然,根据课程的不同,它会是一个不同的数字,但名称相同。然后,您可以在Shape::static_size
中使用Worker
。
我选择了特定名称static_size
和enum
类型来镜像boost::array
,但如果您不关心这一点,您也可以说:
static constexpr size_t const_size = 1;