c ++:继承std :: array并存储对内部值的引用

时间:2019-02-09 17:51:03

标签: c++ arrays reference c++14

让我们假设我想定义一个结构,该结构可以看作是2D数组,但也可以为数组的内容提供类似于成员的访问器。

例如,可以编写一个Point2D结构,该结构本质上是一个数组,但也可以提供x和y 成员(而不是访问器)。这样的结构可以充当不同库之间的桥梁:我与一些库一起工作,这些库将点视为具有x y成员,而另一些库则将其视为数组。

地精:https://godbolt.org/z/4H-gae

#include <array>
#include <cassert>

struct Point2D : public std::array<double, 2>
{
    using Base = std::array<double, 2>;
    Point2D(Base && v) : 
        Base(v),
        x(operator[](0)),
        y(operator[](1))
    {}

    double &x, &y;
};

void test() 
{
    Point2D p({1., 2.});
    assert(p.x == 2.);
    p.x += 4.;
    assert(p.x == 5.);
}

这样的用例合理吗,还是我要求被各种UB反复射击?

如果这样的方法合理,有没有办法使构造函数constexpr?

0 个答案:

没有答案