Возникла проблема при попытке распечатать метод класса, который имеет тип перечисления enum.
У меня есть метод, который возвращает перечисление, которое приведено к 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.И так все работает просто отлично.Но учитывая тот факт, что мой enum-класс расширен от bool, могу ли я сделать что-то вроде этого:
VSync Window::IsVSync() const
{
return m_WindowData.VSync;
}
Сначала я думал, что смогу, так как мы расширяем enumкласс от bool, но я ошибся, и он выдает мне эту ошибку при попытке вывести на консоль:
бинарный '<<': не найден оператор, который принимаетправый операнд типа 'VSync' (или нет приемлемого преобразования) </p>
Я печатаю метод на консоли с помощью:
std::cout << myWindow.IsVSync() << "\n";
Что, конечно, должно возвращать либо 1, либо 0;
Когда я приведу его к bool в выводе, вот так:
std::cout << static_cast<bool>(myWindow.IsVSync()) << "\n";
работает просто отлично, но я нехочу, чтобы пользователь должен был привести его к bool, чтобы он работал.Мне нужно решение, которое находится в самом методе, поэтому вызов остается таким:
std::cout << myWindow.IsVSync() << "\n";