我想重载一个函数来检查struct对象是否为空。
这是我的结构定义:
struct Bit128 {
unsigned __int64 H64;
unsigned __int64 L64;
bool operate(what should be here?)(const Bit128 other) {
return H64 > 0 || L64 > 0;
}
}
这是测试代码:
Bit128 bit128;
bit128.H64 = 0;
bit128.L64 = 0;
if (bit128)
// error
bit128.L64 = 1
if (!bit128)
// error
答案 0 :(得分:3)
您想要重载bool
运算符:
explicit operator bool() const {
// ...
此运算符不一定是,但应该是const
方法。
答案 1 :(得分:3)
#include <cstdint>
struct Bit128
{
std::uint64_t H64;
std::uint64_t L64;
explicit operator bool () const {
return H64 > 0u || L64 > 0u;
}
};
答案 2 :(得分:1)
没有&#34;空&#34;运算符,但如果您希望对象在布尔上下文中具有重要性(例如if-conditions),则需要重载布尔转换运算符:
explicit operator bool() const {
return H64 != 0 || L64 != 0;
}
请注意,显式转换运算符需要C ++ 11。在此之前,您可以使用非显式运算符,但它有许多缺点。相反,你会想要谷歌的安全布尔成语。
答案 3 :(得分:1)
您要查找的语法为explicit operator bool() const
is safe in c++11 and later