c ++中模板类中的constexpr成员函数

时间:2014-10-30 02:43:51

标签: c++11

我有几个类来描述一些形状。

Line.hpp

class Line {
private:
    double _x;
public:
    Line(double x) : _x(x) { }
    virtual std::size_t size() const { return 1; }
};

Quad.hpp

class Quad : public Line {
private:
    double _y;
public:
    Quad(double y) : _y(y) { }
    virtual std::size_t size() const { return 2; }
};

Hexa.hpp

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,但这不起作用,因为LineQuad的析构函数是虚拟的。

我应该使用静态成员方法或变量吗?

我正在使用C ++ 11。

感谢任何反馈。谢谢。

1 个答案:

答案 0 :(得分:0)

在每个班级中加上这样的东西:

enum { static_size = 1 };

显然,根据课程的不同,它会是一个不同的数字,但名称相同。然后,您可以在Shape::static_size中使用Worker

我选择了特定名称static_sizeenum类型来镜像boost::array,但如果您不关心这一点,您也可以说:

static constexpr size_t const_size = 1;