Dynamische Funktionsnamen möglich?



  • Wozu soll das gut sein?



  • Um Namensraume zu simulieren, wo keine vorhanden sind, #define und #undef.



  • knivil schrieb:

    Um Namensraume zu simulieren, wo keine vorhanden sind, #define und #undef.

    Stelle ich mir gerade unglaublich übersichtlich vor. 👎


  • Administrator

    Ich würde auch zu einem Namensraum raten. Wenn du ihn umbenennen willst, kannst du Refactor Tools verwenden. Das kommt natürlich ein wenig auf deine IDE an, ob sowas vorhanden ist. Notfalls gibt es für die meisten IDEs nachrüstbare Tools.

    Grüssli



  • Stelle ich mir gerade unglaublich übersichtlich vor.

    Wuerde ich so in C machen bzw. wird so bei Tools wie flex/bison gemacht. Ich fand es ueberschaubar. In C++, wo Namensraume vorhanden sind, macht es wenig Sinn.

    Stelle ich mir ... vor.

    Was du dir vorstellst oder vorstellen kannst, sollte nicht zur Beurteilung herangezogen werden. (sinngemaess aus A.E. Poe, Eureka (der deutsche Wikipediaartikle wird dem Werk aber nicht gerecht) )



  • Versuch mal

    #define PREFIX abc
    int PREFIX##_name();
    


  • knivil schrieb:

    Stelle ich mir gerade unglaublich übersichtlich vor.

    Wuerde ich so in C machen bzw. wird so bei Tools wie flex/bison gemacht. Ich fand es ueberschaubar. In C++, wo Namensraume vorhanden sind, macht es wenig Sinn.

    Stelle ich mir ... vor.

    Was du dir vorstellst oder vorstellen kannst, sollte nicht zur Beurteilung herangezogen werden. (sinngemaess aus A.E. Poe, Eureka (der deutsche Wikipediaartikle wird dem Werk aber nicht gerecht) )

    Glaubst du an Gott? 😕



  • Wozu soll das gut sein?

    Es geht um Messgerätetreiber.
    Ich habe ein Code-Grundgerüst (eine DLL) geschrieben, auf dessen Basis mehrere Treiber enstehen sollen.
    Leider kann ich nicht objektorientiert arbeiten, weil die DLL von Umgebungen benutzt werden soll, die keine Instanzen erzeugen können.
    Für die Geräte "rs123" und "ag456" muss es also Funktionen "rs123_open()" und "ag456_open()" geben.
    Ansonsten könnte man ja nicht beide DLLs gleichzeitig laden.
    Und es wäre halt sehr praktisch, wenn ich nicht bei jedem Gerät jeden Funktionsnamen einzeln ändern müsste.

    Und nebenbei bemerkt:
    namespaces kennt die übergeordnete Umgebung (National Instruments TestStand) leider auch nicht.


  • Administrator

    Keine Klassen, keine Namensräume, keine Überladung, wohl auch keine Templates, keine C++ Standardbibliothek ... ehm moment?
    Du programmierst in C? Falsches Forum! 😃 :p

    Grüssli



  • Er.
    Eine DLL mit der du einen Treiber schreiben willst?
    Usermode-Treiber oderwas?

    Ansonsten: könntest du nicht einfach Device-IDs verwenden?
    In der DLL könntest du dann statisch Platz für N Geräte (10, 100, ... wieviel du halt brauchst) reservieren. Dann muss das Programm welches die DLL verwendet auch keine Instanz mehr anfordern.
    Die IDs müsstest du dann natürlich auch statisch (fix) vergeben. Sonst musst du ja wieder "IDs" anfordern. Und wenn du keine Instanzen anfordern kannst, kannst du vermutlich auch keine IDs anfordern.


Anmelden zum Antworten