gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:18:26 26 4
gpt4 key购买 nike

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

我有一个方法,它返回一个转换为 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 扩展了枚举类,但我错了,当我尝试打印到控制台时它给我这个错误:

binary '<<': no operator found which takes a right-hand operand of type 'VSync' (or there is no acceptable conversion)

我将方法打印到控制台:

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

这当然应该返回 1 或 0;

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

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

它工作得很好,但我不想让用户必须将它强制转换为 bool 才能工作。我需要一个方法本身的解决方案,所以调用保持这样

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

最佳答案

您可以像这样在类之外为枚举类型定义流运算符重载:

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).

希望对您有所帮助。

关于具有枚举类类型的 C++ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54762394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com