Ich verwende verschachtelte Namespaces für diese. Ich mag sie besser, als die Enumeration in eine Klasse zu schreiben, da außerhalb der Klasse die volle MyClass :: MyEnum-Verwendung verwendet werden muss, selbst wenn MyEnum nicht mit anderen Bereichen kollidiert.
Mit einem verschachtelten Namespace können Sie die "using" -Syntax verwenden. Außerdem werde ich Enums, die sich auf ein bestimmtes Subsystem beziehen, in einer eigenen Datei ablegen, so dass Sie keine Abhängigkeitsprobleme bekommen, wenn Sie die Welt mit einbeziehen müssen, um sie zu verwenden.
So in der ENUM-Header-Datei erhalten Sie:
// MyEnumHeader.h
// Consolidated enum header file for this dll,lib,subsystem whatever.
namespace MyApp
{
namespace MyEnums
{
enum SomeEnum { EnumVal0, EnumVal1, EnumVal2 };
};
};
Und dann in der Klasse Header-Datei erhalten Sie:
// MyInterfaceHeader.h
// Class interfaces for the subsystem with all the expected dependencies.
#include "MyEnumHeader.h"
namespace MyApp
{
class MyInterface
{
public:
virtual void DoSomethingWithEnumParam (MyEnums::SomeEnum enumParam) = 0;
};
};
Oder wie viele Enum-Header-Dateien verwenden, wie sinnvoll ist. Ich mag es, sie von den Klassenheadern getrennt zu halten, damit die Enums an anderer Stelle im System verwendet werden können, ohne die Klassenheader zu benötigen. Wenn Sie sie an einer anderen Stelle verwenden möchten, müssen Sie die Einkapselungsklasse nicht wie bei der Deklaration der Enums innerhalb der Klassen definieren.
Und wie bereits erwähnt, in dem äußeren Code Sie folgende verwenden:
using namespace MyApp::MyEnums;
Anything „best-practice“ im Zusammenhang immer Ihre Mitarbeiter falsch ist, wird subjektiv sein, aber ich denke. Das .NET-Framework enthält keinen Enums-Namespace und das aus gutem Grund. Setzen Sie die Enums in den Namensraum, in dem sie am logischsten sind. (Und wenn es angebracht ist, ja, schachteln Sie sie in einer Klasse.) –
Bis Ihr Kollege sein/ihr Problem erklärte, ist "dumm" nicht wirklich eine Metrik, nach der Sie handeln können. –
So ausgedrückt, der Mitarbeiter ist falsch. Wenn die Lösung viele Projekte hat und die Enums in mehreren Projekten verwendet werden, ist es sinnvoll, sie an einem Ort zu haben. – Bakudan