如何重载struct的空操作符?

时间:2017-03-20 12:44:20

标签: c++ struct operator-overloading

我想重载一个函数来检查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

4 个答案:

答案 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