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

Location:
code/branches/objecthierarchie/src
Files:
3 edited

Legend:

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

    r172 r176  
    1111        public:
    1212            BaseObject();
    13             ~BaseObject();
     13            virtual ~BaseObject();
    1414
    1515            inline bool isA(Identifier* identifier)
  • 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
  • code/branches/objecthierarchie/src/orxonox.cc

    r172 r176  
    123123        test4 = new A3();
    124124*/
    125 /*
     125
    126126        std::cout << "Test 5\n";
    127127        A1* test5_01 = new A1();
     
    144144        A3B2C2* test5_18 = new A3B2C2();
    145145
     146/*
    146147        OrxonoxClass* test5;
    147148        for (int i = 0; i <= 18; i++)
     
    434435*/
    435436
     437        std::cout << "Test 7\n";
     438        std::cout << "1\n";
     439        BaseIdentifier<A1B1> test7_01;
     440        test7_01 = Class(A1B1C1);
     441
     442        BaseIdentifier<A1B1> test7_02;
     443        test7_02 = Class(A1B1);
     444
     445//        std::cout << Identifier(test7_02).getName() << "\n";
     446
     447/*
     448        BaseIdentifier<A1B1> test7_03;
     449        test7_03 = Class(A1);
     450
     451        BaseIdentifier<A1B1> test7_04;
     452        test7_04 = Class(A1B2);
     453
     454        BaseIdentifier<A1B1> test7_05;
     455        test7_05 = Class(A2);
     456*/
     457        std::cout << "2\n";
     458
     459
    436460      }
    437461
Note: See TracChangeset for help on using the changeset viewer.