具有枚举类类型的C ++方法

时间:2019-02-19 09:06:33

标签: c++ enums

尝试打印具有枚举类类型的类方法时出现问题。

我有一个方法,该方法返回一个强制转换为bool的枚举:

bool Window::IsVSync() const
{
    return static_cast<bool>(m_WindowData.VSync);
}

m_WindowData.VSync是VSync类型。

这是枚举类:

enum class VSync : bool
{
    Disable = false,
    Enable = true
}

我知道在枚举类中我没有得到隐式转换,这就是我转换为bool的原因。这样,一切都很好。但是考虑到我的枚举类是从bool扩展而来的,我可以做这样的事情吗?

VSync Window::IsVSync() const
{
    return m_WindowData.VSync;
}

起初,我以为可以,因为我们从bool扩展了枚举类,但是我错了,并且当我尝试打印到控制台时,它给了我这个错误:

  

二进制'<<':未找到采用右手操作数的运算符   输入“ VSync”(或没有可接受的转换)

我使用以下方法将方法打印到控制台:

std::cout << myWindow.IsVSync() << "\n";

当然应该返回1或0;

当我在输出中将其转换为bool时:

std::cout << static_cast<bool>(myWindow.IsVSync()) << "\n";

它工作得很好,但是我不想让用户不得不将其转换为bool才能工作。我需要一个方法本身的解决方案,因此调用仍然保持这种状态

std::cout << myWindow.IsVSync() << "\n";

2 个答案:

答案 0 :(得分:2)

您可以在类外为枚举类型定义流运算符重载,如下所示:

static std::ostream& operator<<(std::ostream& os, const VSync& val)
{
    switch (val) {
        case VSync::Disable:
            os << "VSync disabled";
            break;
        case VSync::Enable:
            os << "VSync enabled";
            break;
    }
    return os;
}

通过这种方式,您无需投放任何内容,并且可以打印比10更详细的内容(或必须使用std::boolalpha)。

我希望能对您有所帮助。

答案 1 :(得分:0)

它不是从bool扩展的,使用的空间与bool相同。
对于枚举,冒号不表示继承。