类成员参数中的Constexpr

时间:2018-07-19 17:13:11

标签: c++ constexpr

我想在类声明的各个部分的std :: array模板参数中指定一个变量,如下所示:

class SetAngles
    {
    public:
        constexpr int txSize() const { return 19; }
        constexpr int rxSize() const { return ack.size(); }

        void txParse(std::array<uint8_t, txSize()>& packet)
        {
            ...
        }

    private:
        std::array<uint8_t, txSize()> txPacket = {0xFA, 0x0E, 0x11, 0x00, 0x00, 0x00, 0x00, 
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
};

因此,如果我需要更改常量,则不必在各个地方进行很多次常量更改。显然,上面的内容不是constexpr的工作原理...我也尝试过使用公共成员变量而不是函数,但仍然失败。我收到编译器错误:

cannot call member function ‘constexpr int GimbalPacket::SetAngles::txSize() const’ without object

我知道#define语句可以工作,但是我希望将其封装在类中。有关如何执行此操作的任何建议?

1 个答案:

答案 0 :(得分:0)

我无法像最初想要的那样在类中使用constexpr。最终只是将constexpr放在类之外,然后将它们都包装在命名空间中以完成封装。