Ist das generisch?



  • Also ist meine Lösung richtig??? Und das 2.? Kannst du mir meine Fragen dazu beantworten? Und was passiert wenn man sowas macht? (Bezieht sich auf mein erstes)

    using namespace std;
    cout<<"Zahl eingeben!";
    int i;
    cin>>i;
    cout<<add5<i>;
    

    /edit: Aber deine Lösung ist dann also nicht zur kompilier-zeit berechnet?



  • versuch mal dieses code stück zu kompilieren....
    dann sollte dir in etwa folgende meldung entgegenschlagen:

    error: non-constant `i' cannot be used as template argument

    warum ist auch klar: die templates werde vom compiler zur compile-zeit instaziiert. der wert von i ist allerdings erst zur laufzeit bekannt.



  • /edit: Aber deine Lösung ist dann also nicht zur kompilier-zeit berechnet?

    doch, static const verhält sich genauso, mit enums ist es aber einfacher zu erklären ;).

    dein letztes codebeispiel kann aber nicht funktionieren, da template parameter compiletime konstant sein müssen, dh die eingabe müsste schon zur compilezeit erfolgen, bzw der compiler müsste wissen, welche zahl eingegeben wird,und da das nicht geht, sagt der compiler: nö,das mach ich nicht. 😉

    ist auch irgendwie verständlich, da es ja nur für deinen fall 233-1 verschiedene eingabemöglichkeiten gäbe, ergo der compiler für 233-1 Klassen code generieren müsste,und die auswahl der Klasse im sourcecode je nachdem welche eingabe stattfand dürfte jeden berechnungsvorteil effektiv zunichte machen. 😃



  • kleine frage: wie kommst du auf 2³³-1 möglichkeiten? imho sollten das eher 2³² sein...



  • rechne den wert aller 32 bits zusammen 😉



  • hm? versteh ich jetzt nicht ganz...es sind 32 bit.. also 32 mal die unterscheidung zwischen 0 und 1 => 2³² mögliche kombinationen => 2³² verschiedene zahlen => 2³² verschiedene instanzen der template klasse... klar, die summe diese 2³² zahlen ist 2³³-1, aber was hat das damit zu tun?



  • es hat damit was zu tun, dass 233-1 verschiedene werte in den template parameter eingesetzt werden können, und für jeden wert im template müsste ne Klasse generiert werden->233-1 verschiedene Klassen.



  • Meine Lösung ist also richtig, aber die Variablen müssen zur kompilezeit bekannt sein und deshalb kann das letzte nicht gehen...



  • genau. und vergiss nicht: floating points gehen auch nicht 😉



  • Jup, und dass man in einer enumeration nicht zu einem Vorzeichenbehafteten typ casten kann, hab ich auch grad rausgefunden...


Anmelden zum Antworten