将全局constexpr类作为静态constexpr移动到类中
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.hp:
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;
^
我能得到的最好的结果是这样,它应该做你想做的事情,但不幸的是,它在接口中公开了你的常量。恐怕这是不可避免的。
*口罩.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;
}
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将对象移动到std::shared_ptr
- 何时在引用或唯一指针上使用移动语义
- 多成员Constexpr结构初始化
- 条件constexpr函数
- constexpr 函数中的非文字(通过 std::is_constant_evaluated)
- 如何从具有移动语义的类对象中生成共享指针
- Visual C++ constexpr Hints
- 将shared_ptr移动到<StructA>shared_ptr<变体<结构A、结构 B>>
- C / C++ 移位/偏移/向左或向右移动位图?
- 如何确认我的constexpr表达式实际上已经在编译时执行
- MSVC将仅移动结构参数解释为指针
- 为什么constexpr的性能比正常表达式差
- 是否可以使用if constexpr删除控制流语句
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 为什么std::isnan 不是 constexpr?
- 自定义先决条件对移动分配运算符有效吗
- constexpr移动构造函数是否有意义
- 使用移动 CTOR 的 constexpr 对象的 constexpr 数组
- 将全局constexpr类作为静态constexpr移动到类中