[英]Move global constexpr class into class as static constexpr
我有一些全局constexpr
Mask
我想把我的Mask
類作為static constexpr
來減少main.cpp中的全局變量
目前這有效 :
main.cpp有 :
constexpr Mask cg_completeMask(0xffffffffffffffffull, 0x1ffff);
Mask.hpp具有(針對SO減少) :
class Mask { unsigned long long m_64; unsigned int m_32; public: constexpr Mask(const unsigned long long ac_64, const unsigned int ac_32) : m_64(ac_64), m_32(ac_32) {} };
我試圖從main.cpp移動全局Mask
:
Mask.hpp有 :
class Mask { unsigned long long m_64; unsigned int m_32; public: static constexpr Mask completeMask; constexpr Mask(const unsigned long long ac_64, const unsigned int ac_32) : m_64(ac_64), m_32(ac_32) {} };
Mask.cpp有 :
constexpr Mask Mask::completeMask(0xffffffffffffffffull, 0x1ffff);
我嘗試過產生這些錯誤 :
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;
^
我能得到的最好的是,它應該做你想要的 - 但不幸的是在界面中暴露你的常量。 這是不可避免的,我害怕。
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.