Frage

Angenommen, ich eine Reihe von Funktionen und Klassen, die einzelne (float) oder double Präzision Templat zu verwenden. Natürlich konnte ich nur zwei Stücke von Bootstrap-Code oder Chaos mit Makros schreiben. Aber ich kann nur zur Laufzeit Template-Argument wechseln?

War es hilfreich?

Lösung

Nein, Sie können nicht Vorlage Argumente zur Laufzeit wechseln, da Vorlagen durch den Compiler zur Compile-Zeit instanziiert werden. Was Sie können tun ist, beide Vorlagen von einer gemeinsamen Basisklasse ableiten haben, immer die Basisklasse in Ihrem Code, und dann entscheiden, welche Klasse abgeleitet zur Laufzeit verwenden:

class Base
{
   ...
};

template <typename T>
class Foo : public Base
{
    ...
};

Base *newBase()
{
    if(some condition)
        return new Foo<float>();
    else
        return new Foo<double>();
}

Makros hat das gleiche Problem wie Vorlagen, indem sie zur Compile-Zeit erweitert werden.

Andere Tipps

Vorlagen sind ein Kompilierung-Mechanismus. BTW, Makros sind auch (streng genommen - ein Vorverarbeitung Mechanismus - die sogar vor der Kompilierung kommt).

Vorlagen sind lediglich ein Kompilierung Konstrukt, wird der Compiler eine Vorlage erweitern und Ihre Klasse / Funktion mit dem angegebenen Argumente erstellen und direkt an Code übersetzen.

Wenn Sie zwischen foo<float> und foo<double> zur Laufzeit wechseln versuchen, müssen Sie entweder einige metaprogramming Tricks verwenden, oder haben nur separate Codepfade für jeden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top