尝试打印具有枚举类类型的类方法时出现问题。
我有一个方法,该方法返回一个强制转换为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";
答案 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;
}
通过这种方式,您无需投放任何内容,并且可以打印比1
或0
更详细的内容(或必须使用std::boolalpha
)。
我希望能对您有所帮助。
答案 1 :(得分:0)
它不是从bool扩展的,使用的空间与bool相同。
对于枚举,冒号不表示继承。