Generieren Sie die set/get-Methoden für eine c++ - Klasse
Gibt es irgendein tool, generiert set-und get-Methoden für eine Klasse automatisch.
Nur ich erstellen Klassen, die sehr Häufig und würde gerne ein tool haben, das für jede Klasse-Mitglied wil erzeugen die folgenden Funktionen automatisch:
Member_Type getMemberName() const; //in header file
Member_Type getMemberName() const //in source file
{
return member;
}
void setMemberName(const Member_Type & val); //in header
void setMemberName(const Member_Type & val) //in source file
{
member = val;
}
Traf ich ein makro wie dieses, aber nicht wie die Idee:
#define GETSETVAR(type, name) \
private: \
type name; \
public: \
const type& get##name##() const { return name; } \
void set##name##(const type& newval) { name = newval; }
Kann jemand sein, der weiß, wie man das mit MS Visual Studio, oder eny anderen tool?
Wenn Sie möchten, dass alle Ihre Mitglieder öffentlich veränderbare (und wenn Sie Ihre Klassen nicht bieten jede Abstraktion) warum nicht nur machen Sie der öffentlichkeit? Ein
Viele der Antworten auf die folgende Frage relevant: stackoverflow.com/questions/2977007/.... Bottom line: Sie denken vielleicht, Sie wollen dies, aber es ist in der Regel eine schreckliche Idee.
Wenn OOP Praxis erfordert, dass Sie etwas tun, dumm, dann vielleicht OOP ist nicht der Weg zu gehen? OOP ist ein Mittel zum Zweck, nicht ein Ziel in sich selbst. Das Ziel sollte immer sein, gute, saubere code. Das bekommt man nicht durch die Vervierfachung Ihrer code-Größe, und schreiben Getter/setter für alles. (Abgesehen davon, ist es oft nicht gut OOP-Praxis, dies zu tun. Sollte die Klasse setzen die logischen Operationen, die Sinn machen auf die Klasse an. get/set sind in der Regel nicht sinnvolle Operationen, Sie sind nur Verknüpfungen zu ändern, die Interna der Klasse.
Eine Klasse voller Getter und setter ist die Antithese von OO.
Sie bat für eine bessere Lösung: MACH DAS NICHT! Implementieren Sie Funktionen, die Sinn machen, basiert auf dem, was die Klasse und steht, was die Klasse der Invarianten sind. Automatisch produzieren Getter und setter macht die interne Implementierung, die Verletzung von Kapselung.
struct
tut dies standardmäßig.Viele der Antworten auf die folgende Frage relevant: stackoverflow.com/questions/2977007/.... Bottom line: Sie denken vielleicht, Sie wollen dies, aber es ist in der Regel eine schreckliche Idee.
Wenn OOP Praxis erfordert, dass Sie etwas tun, dumm, dann vielleicht OOP ist nicht der Weg zu gehen? OOP ist ein Mittel zum Zweck, nicht ein Ziel in sich selbst. Das Ziel sollte immer sein, gute, saubere code. Das bekommt man nicht durch die Vervierfachung Ihrer code-Größe, und schreiben Getter/setter für alles. (Abgesehen davon, ist es oft nicht gut OOP-Praxis, dies zu tun. Sollte die Klasse setzen die logischen Operationen, die Sinn machen auf die Klasse an. get/set sind in der Regel nicht sinnvolle Operationen, Sie sind nur Verknüpfungen zu ändern, die Interna der Klasse.
Eine Klasse voller Getter und setter ist die Antithese von OO.
Sie bat für eine bessere Lösung: MACH DAS NICHT! Implementieren Sie Funktionen, die Sinn machen, basiert auf dem, was die Klasse und steht, was die Klasse der Invarianten sind. Automatisch produzieren Getter und setter macht die interne Implementierung, die Verletzung von Kapselung.
InformationsquelleAutor Narek | 2010-06-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht das tool eigentlich, aber man könnte
Encapsulate Method
im Visual Assist X, zum Beispiel, die macht getter - /setter - Methoden für einige private Schüler.Sicher, viele der Werkzeuge, die funktionieren ähnlich wie VAX haben die gleichen Methoden.
Auch, wenn Sie zu tun haben, diese Aktion für eine Menge von Klassen, die Sie implementieren können Ihre eigenen Kommandozeilen-tool und lauch für jede Quelldatei, die Sie haben.
InformationsquelleAutor Costantino Rupert
Warum wollen Sie generieren diese Methoden?
In der Regel ein besserer Ansatz ist, um einen tatsächlichen Einsatz der Schnittstelle definiert Operationen auf dem Objekt, nicht nur Sätze der einzelnen Attribute. Durch erstellen einer Klasse, Schnittstelle, vermeiden Sie die Notwendigkeit zu schreiben Sie eine Reihe von Getter und setter.
Wenn Sie wirklich brauchen, um zu generieren, public Getter und setter für alle (oder sogar die meisten) der Attribute, die wahrscheinlich besser ist, dass es einfach eine struct, dann ist keine Z generation benötigt wird.
InformationsquelleAutor Mark B
Wenn Sie Visual Studio, meine Atomineer Pro-Dokumentation add-in wird - es wird sofort fügen Sie getter/setter-Methoden für einen member-Bereich, mit einer Benennung Stil Ihrer Wahl.
z.B. wenn Sie diese:
Dann können Sie den Befehl ausführen, um Sie zu konvertieren, um diese
(Hinweis: Sie müssen nicht auf "m_" oder "Get..." - dies ist nur ein Beispiel um zu zeigen, wie es behandelt vorangestellt oder angehängt naming-Schemata. Sie können konfigurieren, dass das Mitglied benennen Stil verwendet (Geschwindigkeit, _speed, mSpeed, m_speed, etc.) und die Benennung Stil für die getter/setter-Methoden (GetSpeed(), get_speed(), etc))
Tut es ähnliche Dinge, die bei Anwendung auf eine C# - Mitglied:
dann können Sie den Befehl ausführen, um Sie zu konvertieren, um eine auto-Eigenschaft:
...und führen Sie den Befehl ein zweites mal zu produzieren, eine Eigenschaft mit einem Feld sichern:
InformationsquelleAutor Jason Williams
Stimmen mit Kotti - Visual Assist (und andere add-ins) bieten diese Funktionalität.
Den eigentlichen source-code sollte der Getter /setter, da Sie wahrscheinlich hinzufügen möchten, Validierung und change notification die setter, wie gebraucht.
Mithilfe eines Makros für, dass ist einfach nur... facepunchable. (bereit zu erarbeiten, auf Anfrage).
InformationsquelleAutor peterchen
Konnte ich nicht finden, ein tool, also schrieb ich ein python-Skript in 10 Minuten. Es ist nicht perfekt aber hilfreich sein:
generate_getters.py :
Verwendung: > python generate_getters.py ClassName.h
Generieren setter ist Links als übung für den Leser. 😉
InformationsquelleAutor user18853