Engines und Templates



  • Hallo,
    ich habe ein Problem bei der Programmierung von Templates:

    ich habe eine Klasse, die in einem Algorithmus verschiedene komplexe Datenstrukturen verwenden soll. Um virtuelle Funktionen zu umgehen, habe ich VERSUCHT, sogenannte Engines zu verwenden.
    Dazu habe ich mir ein Template geschrieben:

    template<class T> class XYZ
    {

    private:
    // die Datenstruktur
    T dStructure;

    // verschiedene Zugriffsfunktionen
    function(...)
    {
    dStructure.function();
    }
    ....
    }
    diese Klasse dient als Engine und kapselt die verschiedenene Funktionen von den jeweiligen Datenstrukturen

    In einer anderen Klasse verwende ich dieses Template um die verschiedenen Algorithmen zu verwenden:

    class A
    {

    protected:

    XYZ<class T> *pDataStructure;

    public:

    A(XYZ<class T>& rData, ...);
    ....
    }

    aufgerufen wird das ganze dann als:

    XYZ<KONKRETE ENGINEKLASSE> datastructure(...);
    und übergabe einer Referenz auf datastructure an Klasse A

    Bei einfacher Kompilation (ohne linken) von Klasse A kommt dann allerdings folgende Fehlermeldung:

    XYZ<T>':
    A.cc:131: instantiated from here
    ../../include/.../XYZ.hh:25: error: A<T>::dStructure' has incomplete type ../../include/.../A.hh:49: error: forward declaration of
    struct T'

    In Zeile 131 ist folgender Code:
    return (pDataStructure->function());

    Kann mir da jemand weiter helfen?? Kann ich so Engines überhaupt einsetzen??



  • Diese "Datenstrukturen" Engines zu nennen, halte ich für ungünstig, da verwechslungsgefahr mit Engines(aus der Grafikprogrammierung) besteht. Ein bekannterer Name ist Decorator / Dekorierer. Ich denke es liegt daran, dass der Compiler nicht wissen kann, ob der Template-Parameter die Funktion function in seiner öffentlichen Schnittstelle hat. Die Fehler deuten auch darauf hin.

    mfg
    Glamdring


Anmelden zum Antworten