将全局 constexpr class 作为静态 constexpr 移动到 class

Move global constexpr class into class as static constexpr

我有一些全局 constexpr Mask,我想将其作为 Mask class 的一部分作为 static constexpr 以减少全局在 main.cpp

目前有效:

我试图从 main.cpp 移动全局 Masks:

我的尝试产生了这些错误:

In file included from main.cpp:3:0:
Mask.hpp:12:27: error: constexpr static data member 'completeMask' must have an initializer
     static constexpr Mask completeMask;
                           ^
In file included from Mask.cpp:1:0:
Mask.hpp:12:27: error: constexpr static data member 'completeMask' must have an initializer
     static constexpr Mask completeMask;
                           ^

我能得到的最好的是这个,它应该做你想做的 - 但不幸的是在界面中暴露了你的常量。这恐怕是不可避免的。

* Mask.hpp

class Mask {
    unsigned long long m_64;
    unsigned int       m_32;


    // private constructor
    constexpr Mask(const unsigned long long ac_64, const unsigned int ac_32) :
    m_64(ac_64),
    m_32(ac_32)
    {}

public:

    // public declarations
    inline static constexpr Mask complete();
    inline static constexpr Mask partial();

};

// inline definitions
constexpr Mask Mask::complete()
{
    return Mask(0xffffffffffffffffull, 0x1ffff);
}

constexpr Mask Mask::partial()
{
    return Mask(0xf0f0f0f0f0f0f0f0ull, 0x1ffff);
}

使用示例:

auto main() -> int
{
    auto m1 = Mask::complete();
    auto m2 = Mask::partial();

    return 0;
}