2016-08-14 67 views
1

我将std::vector的集合存储在std::tuple中。但是,当我从元组中获取元素并对其进行修改时,我只修改返回的元素的副本。从std :: tuple获取副本而不是引用

template<typename... Ts> 
class ComponentStore 
{ 
public: 
    ComponentStore() 
    { 

    } 
    ~ComponentStore() 
    { 

    } 

    template<typename T> 
    std::vector<T>& Get() 
    { 
     return std::get<std::vector<T>>(m_components); 
    } 

private: 
    std::tuple<std::vector<Ts>...> m_components; 
}; 

这是我计划如何使用ComponentStore类:使用汽车本身

ecs::component::ComponentStore<ecs::component::Position, ecs::component::Velocity> comstore; 

//Get the position vector 
auto positionvec = comstore.Get<ecs::component::Position>(); 
//Add a new position 
positionvec.emplace_back(ecs::component::Position{}); 


//Later on, get the position vector again 
auto positionvec2 = comstore.Get<ecs::component::Position>(); 

//But it's empty??? this is wrong. It should have 1 element. 

回答

4

,创建推导出非引用类型的变量,因此

auto positionvec = comstore.Get<ecs::component::Position>(); 

创建一个新的向量;

auto& positionvec = comstore.Get<ecs::component::Position>(); 

您可以通过使用自动&解决这个问题

相关问题