variable Argumentliste



  • weil ich schreibfaul bin, habe ich mir irgendwann mal ein Template erstellt, um den wiederholten Aufruf einer Elementfunktion mit verschiedenen Argumenten zu vereinfachen (siehe unten).
    Aber irgenwie habe ich an der markierten Stelle nie so richtig verstanden, warum das so funktioniert bzw. warum es nicht so funktioniert, wie ich denken würde, daß es funktionieren müßte. Hat jemand eine Erklärung dafür?

    #include "stdafx.h"
    #include <iostream>  
    #include <stdio.h>
    #include <stdarg.h>
    
    template<class Base, class Instance, class argType>
    void VarArgs(Instance Obj, void (Base::*fnc)(argType) ,...)
    {
        va_list argptr;
        va_start (argptr,fnc);              
        argType tmp;    
        do  
        {
            //tmp=va_arg(argptr, fnc);      //so würde ich es für richtig halten, geht aber nicht ???
            tmp=va_arg(argptr, argType);    // so gehts.... 
            (Obj.*fnc)(tmp);
        }
        while (*argptr!=0);
    };
    
    class testType
    {   
    public:
        inline void nix(int x) 
        {
            std::cout << "sinnlose Funktion:" << x << std::endl;
        };  
    };
    
    int main()
    {
        testType einT;
        VarArgs(einT,&testType::nix,1,2,3,4,5);
        VarArgs(einT,&testType::nix,100,1000);
        VarArgs(einT,&testType::nix,10,9,8,7,6,5,4,3,2,1);
        return 0;
    }
    


  • nene, lass das mal. c++ und variable argumentliste verträgt sich nicht



  • danke für DEN Kommentar 😉 Wie man sieht, funktionert es ja. Ich habe dieses Template (und andere nach gleichem Muster) auch recht oft benutzt. Nur habe ich mich, nachdem es dann lief, nicht mehr mit der für mich eigentlich unverständlichen Stelle beschäftigt (die Lösung habe ich damals nur durch ausprobieren gefunden). Da kam ich jetzt eher zufällig drauf - aber ich finde halt immer noch keine Erklärung.



  • Original erstellt von <tocio>:
    nene, lass das mal. c++ und variable argumentliste verträgt sich nicht

    solange er nur buildins und pods damit aufruft solle da schon nix passieren



  • uuuups - vergeßt das ganze. Bin auf meinen eigenen Kommentar reingefallen, der Code ist ok so. Thread bitte löschen..... *schäm*



  • @CodeWalker
    Warum inlinest du sinnlose Funktionen??? 😉


Anmelden zum Antworten