Was kosten Templates?



  • x schrieb:

    ahja, das lässt sich nicht hartcodieren, oder was

    Tu bitte mal

    template <typename ForwardIterator>
    void Algorithm(ForwardIterator itr)
    {
        typedef typename std::iterator_traits<ForwardIterator>::value_type ValueType;
        ... // Mache was mit ValueType
    }
    

    hier ValueType ohne Metaprogrammierung hardcodieren.



  • Shade Of Mine schrieb:

    ipsec schrieb:

    Aber sämtliche Beispiele dafür sind prinzipbedingt akademischer Humbug, denn ein zur Compilezeit feststehendes Ergebnis kann ich genauso gut hardcodieren.

    Es sei denn das Ergebnis ist nicht eine Zahl sondern ein Typ.
    Dann wirds naemlich interessant.

    Ja natürlich, da habe ich mich falsch ausgedrückt. Ich meinte Beispiele wie:

    fak<10>::value;
    primzahlen_bis<100>::value;
    nullstelle<add<mul<2, mul<x, x> >, -1> >::next::value;    // 2. Nullstelle von f(x)=2x^2-1
    kuerzester_weg<'A', 'C', graph<knoten<'A'>, knoten<'B'>, knoten<'C'>, kante<'A', 'B', 1>, kante<'B', 'C', 2>, kante<'A', 'C', 100> > >::begin::next;   // 2. Knoten des kürzesten Weges
                                                                                                                                                           // von A nach C in dem Graphen
    

    Diese Ergebnisse kann man wesentlich lesbarer auch hardcodieren.
    Das in Verbindung mit Typen TMP gewaltig Entwicklungszeit oder Laufzeit spart, ist natürlich klar. (Man denke an eine Implementierung von vector ohne Templates (und am besten noch ohne Makros, denn die sind böse)).



  • ipsec schrieb:

    und am besten noch ohne Makros, denn die sind böse

    Interessant ist doch gerade, dass Makros in Kombination mit Template-Metaprogrammierung enormes Potential haben.

    Ob nun

    TYPELIST_4(int, double, bool, signed char)
    

    oder

    STATIC_ASSERT(Condition)
    

    oder

    MAP_TYPES(KeyA, ValueA)
    MAP_TYPES(KeyB, ValueB)
    MAP_TYPES(KeyC, ValueC)
    

    Man hat mit Makros eine effiziente Waffe gegen den unschönen und sperrigen Template-Code. Man kann Metafunktionen wie Funktionen aussehen lassen. Makros ermöglichen sogar mächtige Codegeneratoren wie Boost.Preprocessor.


Anmelden zum Antworten