Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

hallo,

ich wüsste gern ob es möglich ist den inhalt eines Strings in einen funktionsnamen umzuwandeln

also z.B.:


String test = "printf";

getfunctionbystring(test)("printf funktion");

oder ist so etwas nicht möglich ?

würde mich auch interessieren ob das für variablen gehen würde...

Nein, das geht nicht. Beim Compilieren werden alle Funktionsnamen und Variablennamen entfernt, daher kann diese Zuordnung zur Laufzeit nicht erfolgen.

So etwas lässt sich aber auch immer anders lösen - und sei es mit einem assoziativen Container wie std::map.

Was hast du denn vor?

  • Autor

naja... dass ich mit argc nen parameter habe (also als string)

und bei dem string soll dann der namespace der funktion gleich mit drin sein

also <param> ":" <funktionsname>

  • Autor

Er selber soll ja keine funktion aufrufen

Er soll theorethisch nur den namespace selber auswählen

ein C++-Dozent meinte jedenfalls mal zu mir, für sowas gibts eine Funktion

Er selber soll ja keine funktion aufrufen

Er soll theorethisch nur den namespace selber auswählen

Das ändert am prinzipiellen Problem nichts.

ein C++-Dozent meinte jedenfalls mal zu mir, für sowas gibts eine Funktion
Mir ist nicht bekannt, dass das zur Laufzeit möglich wäre. Zur Compilezeit kann man das mit einer using-Direktive machen. Aber damit kann man nicht auf eine Benutzereingabe reagieren.
jup, aber wenn ich zum beispiel nen void pointer übergeb und den nach dem datentyp prüfen möchte, was dann ?

Dann hast du wieder ein Designproblem. Der Datentyp eine void-Pointers ist void*.

Kann es sein, dass du früher mit PHP oder einer anderen Scriptsprache gearbeitet hast?

MSL, PHP ect...

datentypenlose Sprachen

Dann wirst du dich an das starre Typsystem von C und C++ gewöhnen müssen. Viele Dinge macht man da eben anders. Deine bewährten Methoden kannst du nicht einfach auf C++ übertragen.

Dann musst du entweder noch einen weiteren Parameter übergeben, anhand dessen du den Typ bestimmst oder dich näher mit Templates beschäftigen.
Templates werden ihm auch nichts bringen, weil die zur Compilezeit auswertet werden.
  • Autor
Dann wirst du dich an das starre Typsystem von C und C++ gewöhnen müssen. Viele Dinge macht man da eben anders. Deine bewährten Methoden kannst du nicht einfach auf C++ übertragen.

Ich weis, ich hab seit 4 jahren C/C++ *g*

wenn ich keine Typprüfung will nehm ich makros

mir gings einzig und allein um Casting

z.B.

funktion (void* lpParam)

{

CClass* pCClass = (CClass) lpParam

}

wie kann ich prüfen ob der richtig castet

(das beispiel aus dem thread mit _beginthread)

Templates werden ihm auch nichts bringen, weil die zur Compilezeit auswertet werden.

Also ich kenn mich damit eh nicht sonderlich aus, allerdings dachte ich das man dieses Verfahren dabei irgendwie verwenden kann:

http://www.fun-soft.de/showtopic.php?threadid=13006&time=1131702056

@TDM

C++ stellt seine eigenen cast Funktionen zur Verfügung. Vielleicht hilft dir in dem Fall dynamic_cast weiter...

wie kann ich prüfen ob der richtig castet
Gar nicht. Mit dem Cast sagst du dem Compiler, dass du besser weißt als er, welcher Typ dahinter steckt. Der Compiler macht, was du sagst. Bei einem Cast bist du für das Ergebnis verantwortlich, nicht der Compiler. Der einzige, der da etwas falsch machen kann, bist du.
  • Autor
Gar nicht. Mit dem Cast sagst du dem Compiler, dass du besser weißt als er, welcher Typ dahinter steckt. Der Compiler macht, was du sagst. Bei einem Cast bist du für das Ergebnis verantwortlich, nicht der Compiler. Der einzige, der da etwas falsch machen kann, bist du.

genau deswegen will ich ja vorher prüfen ob das casten überhaupt geht ;)

genau deswegen will ich ja vorher prüfen ob das casten überhaupt geht ;)
Und genau das geht in C und C++ nicht, wenn du dich nicht selbst darum kümmerst, dass die Typinformation da ist, sei es als String oder ID oder was auch immer.

Aber wie ich schon sagte, das geht alles auch anders. Ich würde eher das Design ändern, als krampfhaft zu versuchen, einen Programmierstil in C++ umzusetzen, den die Sprache nicht unterstützt.

  • Autor

wie schon gesagt...

ich kann es auch mit if abfragen machen

if (C = 1)

ns1::fn();

else ns2::hn()

das ja kein problem...

trotzdem find ich schade dass so etwas wie funktions-/variablen aufrufe dynamisch zu gestalten nicht geht...

naja kann man nix machen

trotzdem danke

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.