Templatized Speichern mehrerer verschiedener Typen in std :: vector

Ich danke Ihnen allen für Ihre Zeit und schätze sie sehr.

Es besteht die Notwendigkeit, mehrere Variablen unterschiedlichen Typs in einem std :: -Vektor auf vorlagenbasierte Weise zu speichern. Um die folgenden Funktionen nutzen zu können, muss dem Programmierer bekannt sein, in welcher Reihenfolge die Variablen gespeichert wurden und wie viele Variablen gespeichert wurden.

class _NetVar {};

Eine Unterklasse wird erstellt, um die tatsächliche Variable aufzunehmen:

template <class VARTYPE> class NetVar : public _NetVar
{
private:
    VARTYPE Var;
    NetVar(VARTYPE Value)
    {
        Var = Value;
    }
};

Aus der Basis-Helferklasse wird ein Vektor erstellt

std::vector<_NetVar> DataVec;

Daten werden wie folgt in den Vektor eingefügt:

template <class DATATYPE> void AddData(DATATYPE AddData)
{
    DataVec.push_back(NetVar<DATATYPE>(AddData));
}

Hier werden Daten aus dem Vektor gezogen, eine interne Variable hält die aktuelle Position des Vektors und wird jedes Mal inkrementiert, wenn eine Variable angefordert wird:

template <class DATATYPE> DATATYPE GetData()
{
    NetVar<DATATYPE> Temp = PacketData[VecPos];

    return Temp.Var;
    ++VecPos;
}

In der vorherigen Funktion tritt das Problem auf. Ist es möglich, die Unterklasse als Basisklasse zu erkennen, aber ist es möglich, die Basisklasse als eine ihrer Unterklassen zu erkennen?

So wird der Code verwendet:

AddData<int>(32);
AddData<bool>(true);
AddData<std::string>("Test");

auto Var1 = GetData<int>();
auto Var2 = GetData<bool>();
auto Var3 = GetData<std::string>();

Wenn GetData aufgerufen wird, wird eine Ausnahme ausgelöst:

'initializing' : cannot convert from '_NetVar' to 'NetVar<DATATYPE>'

Wenn mir jemand dabei helfen kann, wäre ich sehr dankbar, nochmals vielen Dank für Ihre Zeit.

Hinweis: Externe Bibliotheken wie Boost müssen vermieden werden.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage