Для класса с вложенным перечислимым классом, где должен быть объявлен оператор друга для вложенного перечисления.Потому что это друг, он не может быть вне класса.Но нет способа определить оператор друга внутри объявления класса enum в c ++.Итак, должно ли оно быть объявлено внутри класса, в который вложено перечисление?Это работает как для открытых, так и для частных объявлений enum
РЕДАКТИРОВАТЬ: Вопрос в следующем ... является ли класс вмещания правильной областью для объявления функции друга для вложенного перечисления?
#include <iostream>
namespace a::b::c
{
class Test
{
private:
enum class TestEnumPrivate { v0, v1, v2 };
friend std::ostream & operator << (std::ostream & os, TestEnumPrivate const v)
{
return os << static_cast < int32_t >(v);
}
public:
auto value() const
{
return TestEnumPrivate::v0;
}
enum class TestEnumPublic { v0, v1, v2 };
friend std::ostream & operator << (std::ostream & os, TestEnumPublic const v)
{
return os << static_cast < int32_t >(v);
}
};
}
int main()
{
std::cout << a::b::c::Test().value() << std::endl;
std::cout << a::b::c::Test::TestEnumPublic::v0 << std::endl;
}