【发布时间】:2019-02-19 09:06:33
【问题描述】:
尝试打印具有 enum 类类型的类方法时出现问题。
我有一个方法,它返回一个被强制转换为 bool 的枚举:
bool Window::IsVSync() const
{
return static_cast<bool>(m_WindowData.VSync);
}
m_WindowData.VSync 是垂直同步类型。
这就是枚举类:
enum class VSync : bool
{
Disable = false,
Enable = true
}
我知道使用 enum 类我没有得到隐式转换,这就是我强制转换为 bool 的原因。就像这样,一切都运行良好。但是考虑到我的枚举类是从 bool 扩展而来的,我可以这样做:
VSync Window::IsVSync() const
{
return m_WindowData.VSync;
}
起初,我认为我可以,因为我们从 bool 扩展了枚举类,但我错了,当我尝试打印到控制台时它给了我这个错误:
binary '
我将方法打印到控制台:
std::cout << myWindow.IsVSync() << "\n";
当然,应该返回 1 或 0;
当我在输出中将它转换为 bool 时:
std::cout << static_cast<bool>(myWindow.IsVSync()) << "\n";
它工作得很好,但我不想让用户必须将它转换为 bool 才能工作。我需要一个方法本身的解决方案,所以调用保持不变
std::cout << myWindow.IsVSync() << "\n";
【问题讨论】:
-
return either 1 or 0;- 没有从 VSync 到'1'或'0'的转换。写下来。std::cout << myWindow.IsVSync() == VSync::Disable ? '0' : '1'. -
用户为什么要写这个?我想从方法中做到这一点如果我在输出时转换为 bool 它实际上确实可以正常工作,但是我不想让用户做这样的事情