Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Nov 7, 2007, 12:19:46 AM (17 years ago)
Author:
landauf
Message:

started to implement BaseIdentifier<class B> template

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/objecthierarchie/src/ClassHierarchy.h

    r172 r176  
    44#include <string>
    55#include <iostream>
    6 #include <assert.h>
    76
    87// DONE AND TESTED:
    9 // - klassenhierarchie aufbauen
    10 // - isA u.a. vergleiche
    11 // - in listen einfügen
     8// - build class hierarchy
     9// - isA, isChildOf, ...
     10// - insert into class-lists
     11// - ClassIdentifier
    1212
    1313// IN WORK:
    14 // - factory
    15 // - klassen-identifier
     14// - BaseIdentifier
     15// - Factory
    1616
    1717// TO DO:
    18 // - durch listen iterieren
    19 // - searchtree für classname-strings
     18// - iterate through lists
     19// - searchtree for classname-strings
    2020
    2121
     
    5959
    6060        public:
    61             Identifier(Identifier* identifier) {};
    62             ~Identifier();
    6361            void addObject(OrxonoxClass* object);
    6462            void removeObject(OrxonoxClass* object);
     
    7977        private:
    8078            Identifier();
     79            Identifier(const Identifier& identifier) {}
     80            virtual ~Identifier();
    8181            void initialize(IdentifierList* parents);
    8282
     
    9494
    9595    // ##### ClassIdentifier #####
    96     class A1;
    97 
    9896    template <class T>
    9997    class ClassIdentifier : public Identifier
     
    106104        private:
    107105            ClassIdentifier();
     106            ClassIdentifier(const ClassIdentifier<T>& identifier) {}
    108107            ~ClassIdentifier();
    109108
     
    168167    {
    169168        return new T();
     169    }
     170
     171
     172    // ##### BaseIdentifier #####
     173    template <class B>
     174    class BaseIdentifier// : public Identifier
     175    {
     176        public:
     177            BaseIdentifier();
     178
     179            template <class T>
     180            BaseIdentifier<B>& operator= (ClassIdentifier<T>* identifier)
     181            {
     182                std::cout << "####### Class(" << identifier->getName() << ")->isA( Class(" << ClassIdentifier<B>::getIdentifier()->getName() << ") ) = " << identifier->isA( ClassIdentifier<B>::getIdentifier() ) << "\n";
     183                if (!identifier->isA(ClassIdentifier<B>::getIdentifier()))
     184                {
     185                    std::cout << "Error: Class " << identifier->getName() << " is not a " << ClassIdentifier<B>::getIdentifier()->getName() << "!\n";
     186                    std::cout << "Error: BaseIdentifier<" << ClassIdentifier<B>::getIdentifier()->getName() << "> = Class(" << identifier->getName() << ") is forbidden.\n";
     187                    std::cout << "Aborting...\n";
     188                    abort();
     189                }
     190                this->identifier_ = identifier;
     191                return *this;
     192            }
     193
     194            operator Identifier()
     195            {
     196                return this->identifier_;
     197            }
     198
     199        private:
     200            Identifier* identifier_;
     201    };
     202
     203    template <class B>
     204    BaseIdentifier<B>::BaseIdentifier()
     205    {
     206        this->identifier_ = ClassIdentifier<B>::getIdentifier();
    170207    }
    171208
Note: See TracChangeset for help on using the changeset viewer.