virtual const object& create(const std::function<void(object&)>& constructor )override { ObjectType item; item.id = get_next_id(); constructor( item ); auto insert_result = _indices.insert( std::move(item) ); FC_ASSERT(insert_result.second, "Could not create object! Most likely a uniqueness constraint is violated."); use_next_id(); return *insert_result.first; }
virtual const object& create( const std::function<void(object&)>& constructor ) override { auto id = get_next_id(); auto instance = id.instance(); if( instance >= _objects.size() ) _objects.resize( instance + 1 ); _objects[instance].id = id; constructor( _objects[instance] ); use_next_id(); return _objects[instance]; }
virtual const object& create( const std::function<void(object&)>& constructor ) override { auto id = get_next_id(); auto instance = id.instance(); if( instance >= _objects.size() ) _objects.resize( instance + 1 ); _objects[instance].reset(new T); _objects[instance]->id = id; constructor( *_objects[instance] ); _objects[instance]->id = id; // just in case it changed use_next_id(); return *_objects[instance]; }