Funktionen um Anfang und Ende zu definieren
-
Hallo,
gibt es eine Möglichkeit etwas wie folgt zu machen:// Außerhalb BeispielKlasse->Main->Start(); int Beispiel = 0; // Sachen die in Main ausgeführt werden sollen Beispiel++; BeispielKlasse->Main->End(); // Außerhalb Beispiel = 0; // Fehler: Existiert hier nicht mehr!So das ich quasi nur dort einen Gültigkeitsbereich oder der gleichen habe?
Quasi der Anfanz und das Ende zwischen den man, dann Befehle ausführen lassen kann.Danke
Gruß
-
Hä welchen Sinn soll das haben? Machs doch einfach als Membervariable. Eine lokale lebt in ihrem Scope ab der Deklaration, da kannst du nix dran ändern.
Gruß
-
start(); { int blub; blub = 123; } end();Funktioniert das ? Ist mir grad spontan eingefallen (geraten!), einen neuen Block zu setzen.

-
Ich wollte das, wenn ich z.B eine Socket Klasse programmiere das derjenige der sie benutzt, nicht in der Main() Funktion ( Wo der Empfangs Krams usw... drinne ist ) alles abändern muss sondern einfach mit:
Klasse->Main()->Start() // Zusätzlicher Code Klasse->Main()->End();Den Code in der Main Funktion erweitern kann.
Scheinbar scheint das, aber nicht zu gehen.
Danke
Gruß
-
Wenn du dein Problem und den Zweck von Start und End genauer erklären würdest könnte man dir besser helfen.
Prinzipiell wäre sowas schön:{ MeineKlasste objekt; //machwas } //hier existiert objekt nicht mehr
-
User--- schrieb:
Wenn du dein Problem und den Zweck von Start und End genauer erklären würdest könnte man dir besser helfen.
Prinzipiell wäre sowas schön:{ MeineKlasste objekt; //machwas } //hier existiert objekt nicht mehrHab ich doch gesagt

Also das funktioniert? -okay cool
-
Dummie schrieb:
Ich wollte das, wenn ich z.B eine Socket Klasse programmiere das derjenige der sie benutzt, nicht in der Main() Funktion ( Wo der Empfangs Krams usw... drinne ist ) alles abändern muss sondern einfach mit:
Klasse->Main()->Start() // Zusätzlicher Code Klasse->Main()->End();Den Code in der Main Funktion erweitern kann.
Ich bin mir nicht sicher, ob ich Dich verstanden habe. Das hört sich für mich wie eine Anwendung einer sogenannten Policy an. Ein User Deiner Klasse soll vor und nach dem Aufruf Deiner Methode Main() eigenen Code ausführen können, ohne Deine Klasse verändern zu müssen.
Sowas geht etwa wie folgt:#include <iostream> // Deine Klasse template< typename P > class CKlasse { public: explicit CKlasse( P policy = P() ) : m_policy( policy ) {} void Main() { m_policy.Start(); // Code in Main std::cout << "mitten in CKlasse::Main() " << std::endl; m_policy.End(); } private: P m_policy; }; // Klasse (hier als struct) des Users struct MyStuff { void Start() { std::cout << "Start " << std::endl; } void End() { std::cout << "End " << std::endl; } }; // Anwendung int main() { using namespace std; CKlasse< MyStuff > Klasse; cout << "Main() wird aufgerufen .. " << endl; Klasse.Main(); return 0; }Gruß
Werner
-
Danke für eure Beiträge allerdings hab ich mich scheinbar nicht genau genug Ausgedrückt ich meinte nicht die Funktion Main() in einer Klasse sondern die Funktion int main() welche ein Konsolenprogramm immer besitzt man sollte aus dieser main() Funktion raus die Klasse erweitern können: Ich glaube DirectX macht soetwas Ähnliches mit BeginScene() und EndScene()!
Ich hoffe ihr wisst nun was ihr meint die Sache mit dem Policy kannte ich noch nicht ich erkundige mich darüber mal vielleicht ist es ja sogar das was ich suche
Danke
Gruß
Edit:
Bisschen Pseudo (hoffe es ist verständlich!Teil - Pseudo
#include <iostream> using namespace std; int main () { Klasse t; t->Start(); // Funktion Main() in der Klasse "Klasse" erweitern std::cout << "Erweiterung!!!" << std::endl; t->End(); std::cout << "Dies ist nicht mehr in der Main() Funktion der Klasse!" << std::endl; return 0; }Jedenfalls soll so die Funktion Main() in der Klasse erweitert werden ohne die Klasse selber anzurühren sondern einfach indem man mit Start() eine Anfangsmarke setzt ab den der Code in die Klasse soll und mit End() diesen beendet.
-
Du meinst, du willst etwas vor/nach der main() machen? Dann pack es doch einfach in den Konstruktor/Destruktor eines globalen Objektes:
class initializer { public: initializer() { cout<<"Start - vor main()"<<endl; } ~initializer() { cout<<"Ende - nach main()"<<endl; } }; initializer init; int main() { cout<<"in main()"<<endl; return 0; }(du mußt nur aufpassen mit der Reihenfolge, in der globale Variablen initialisiert werden)
-
Wozu?
(bei den directx funktion ist es übrigens nicht so)
mfg.