Visualizzazione dei risultati da 1 a 10 su 14

Visualizzazione discussione

  1. #1
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626

    [c++] return di un riferimento a un elemento di std::vector

    Ciao a tutti,
    Ho questa situazione:
    codice:
    //components.h
    typedef struct structPositionComponent{
         float x;
         float y;
         float z;
         structPositionComponent(){
           x = y = z = 0;
         }
    }PositionComponent;
    
    //componentmanager.h
    template <typename T>
    class ComponentManager
    {
        public:
            ComponentManager(){};
            virtual ~ComponentManager(){};
    
            T& getComponent(Entity* e){
               if(this->_map.find(e) == this->_map.end()){
                 return create(e);
               }
    
               return this->components[this->_map[e]];
    
            };
            T& create(Entity* e){
               if(this->_map.find(e) == this->_map.end()){
                  T data;
                  this->components.push_back(data);
                  this->_map[e] = this->components.size() - 1;
                  return this->components[this->components.size() - 1];
               }else{
                 return this->components[this->_map[e]];
               }
            }
        protected:
        private:
            std::vector<T> components;
            std::map<Entity*, unsigned int> _map;
    };
    
    //main.cpp
    
    int main(){
      ComponentManager<PositionComponent> posManager;
      Entity the_entity;
    
      PositionComponent p = posManager.create(&the_entity);
      p.x = 3.0f;
      p.y = 3.0f;
      p.z = 2.1f;
    
      PositionComponent ptest = posManager.getComponent(&the_entity);
      std::cout << "->" << (float)ptest.x << std::endl;
    }
    Io mi aspettavo che venisse stampato a video 3.0 ...invece stampa 0. Mi viene il dubbio che p è una copia invece dell'elemento dentro il vettore. Quancuno mi dice dove sbaglio ? Devo per forza usare un puntatore?

    PS:
    Se invece di fare
    codice:
     T data;
      this->components.push_back(data);
    facco
    codice:
    this->components.push_back(new T);
    E' la stessa cosa a livello di memoria?

    Grazie
    Ultima modifica di boots; 23-04-2016 a 18:22

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.