Мне нравится определять мои перечисления, принадлежащие определенному классу внутри этого класса.Это дает понять, что они принадлежат друг другу, и помогает против загрязнения пространства имен:
class Bar
{
public:
enum class Foo
{
something,
somethingElse
};
Bar(Foo foo);
//etc...
};
Чисто из любопытства Я хотел бы знать, можно ли сделать то же самое для класса enum, который используется в качестве параметра шаблона длякласс, в котором он определен:
template <Bar::Foo foo>
class Bar
{
public:
enum class Foo
{
something,
somethingElse
};
};
Очевидно, что это не скомпилируется, потому что Bar
еще не объявлено, пока мы пытаемся использовать Bar::Foo
в качестве типа параметра шаблона.Я хотел бы посмотреть, может ли кто-нибудь придумать какой-нибудь творческий обходной путь.