首页 > 解决方案 > 类成员参数中的 Consexpr

问题描述

我想在我的类声明的各个部分的 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 语句可以工作,但我希望将其封装在类中。关于如何做到这一点的任何建议?

标签: c++constexpr

解决方案


我无法像最初想要的那样在课堂上使用 constexpr。最后只是在类之外放置一个 constexpr 并将两者包装在命名空间中以完成封装。


推荐阅读