Code reduktion



  • Als erstes solltest du eine einheitliche Funktionsschnittstelle finden, um die drei spezifischen Funktionen dann generisch ansprechen zu können.

    void TestRoutine1(TestKlasse& Test)
    {
       Test.normMeth(2);
    }
    

    Anschliessend erstellst du eine weitere Funktion, welche einen Zeiger auf die jeweilige Testroutine als Parameter erhält.

    void MesseZeit(Testklasse& Objekt, void (*TestRoutine)(Testklasse&))
    {
        time1=0.0;
        tstart = clock();
        for (int i = 0; i <=anz ; i++)
        {    
            TestRoutine(Objekt);
        }
        time2 += clock() - tstart;     
        time2 = time2/CLOCKS_PER_SEC;
        cout << "  time  rekMeth= " << time1 << " sec." << endl;
    }
    

    Dann rufst du diese jeweils auf:

    Testklasse MeinTestObjekt;
    MesseZeit(MeinTestObjekt, &TestRoutine1);
    


  • oder direkt memberpointer 😉

    void (testklasse::*memper)(int val) = &testklasse::func1;
    
    testklasse t;
    t.*memptr(1);
    


  • hallo,

    erstmal danke für die Antworten.
    hört sich alles sehr interessant an. 😃 Bin leider etwas überfordert.
    Testklasse.h

    #pragma once
    
    class Testklasse
    {
    public:
    	Testklasse(void);
    	~Testklasse(void);
    	int normMeth(int n);
    	inline int inlMeth(int n)
    	{
    		return n+n;
    	}
    	int rekMeth(int n, int times);
    
    };
    

    Testklasse.cpp

    #include "Testklasse.h"
    //using namespace std;
    
    Testklasse::Testklasse(void)
    {
    }
    
    Testklasse::~Testklasse(void)
    {
    }
    
    int Testklasse::normMeth(int n)
    {
    	return n+n;
    }
    
    int Testklasse::rekMeth(int n, int times)
        {
          if(times==0) return 0;
    	  else
          return n + rekMeth(n,times-1);
        }
    

    und main.cpp ist im ersten Post zu sehen.

    Was kommt nun wo rein? 😞



  • Warum willst du das eigtl testen?
    Interessiert dich nur, was rauskommt?
    Oder willst du in deinem Projekt nur das schnellste nehmen?
    Oder oder oder^^

    bb



  • pampy schrieb:

    Bin leider etwas überfordert. [...] Was kommt nun wo rein? 😞

    Ich habe doch in meinem Post relativ genau erklärt, was du tun musst. Wenn du etwas davon nicht verstehst, dann frage bitte noch einmal konkret nach. Ich möchte nämlich nicht noch einmal alles erklären, nur um dann wieder die gleiche Antwort zu erhalten.



  • Hallo pampy,

    meinst Du sowas

    #include <iostream>
    #include "Testklasse.h"
    #include <ctime>
    #include <boost/bind.hpp>
    using namespace std;
    
    template< typename F >
    void benchmark( F func, int anz, const char* txt )
    {
        double tstart = clock();              
        for (int i = 0; i <=anz ; i++)
        {
            func();
        }
        double time1 = clock() - tstart;    
        time1 /= CLOCKS_PER_SEC;  
        cout << "  time " << txt << "= " << time1 << " sec." << endl;
    }
    
    int main ()
    {
        Testklasse Test;
    
        cout << "Anzahl Loops: ";
        int anz;
        cin >> anz;
    
        benchmark( boost::bind( &Testklasse::normMeth, &Test, 2 ), anz, "normMeth" );
        benchmark( boost::bind( &Testklasse::rekMeth, &Test, 2, 2 ), anz, " rekMeth" );
        benchmark( boost::bind( &Testklasse::inlMeth, &Test, 2 ), anz, " inlMeth" );
        cin.sync();
        cin.get();
        return 0;
    }
    


  • Hallo Werner_logoff,
    exakt.
    Also templates.. wird noch im Semester durchgenommen.

    danke für deine Antwort... werde es mal zuhause testen. 😃



  • was macht cin.sync() gleich nochmal?



  • volkard schrieb:

    was macht cin.sync() gleich nochmal?

    http://www.cplusplus.com/reference/iostream/istream/sync/
    ?



  • drakon schrieb:

    volkard schrieb:

    was macht cin.sync() gleich nochmal?

    http://www.cplusplus.com/reference/iostream/istream/sync/
    ?

    wo ist dann der unterschied zwischen
    stream.ignore( stream.rdbuf()->in_avail() );
    und
    stream.sync();
    ?

    bb


Anmelden zum Antworten