Please help me to choose a container
Hi All, I have a number of named objects of type B whose name can be accessed by B::Name(). B is polymorphic. D1, D2 and so on are derived from B. I want to put them in a set or map-like container ordered by their names. They are referenced by other objects, such as of type C. If the objects in the container are changed by its type (from type D1 to D2) or value, their users can know it automatically, i.e. those information is shared among owners and users. To erase an object in the container, first we need to ensure it is not be used by other objects. Please help me on choose a proper container with smart pointers. I am struggling with it by trying multi-index-container, pointer container, standard container, and cannot find a good way. Thanks a lot ! ! Best regards, Jayden
2011/12/20 Jayden Shui <jayden.shui@gmail.com>
Hi All,
Hi Jayden,
I have a number of named objects of type B whose name can be accessed by B::Name(). B is polymorphic. D1, D2 and so on are derived from B. I want to put them in a set or map-like container ordered by their names. They are referenced by other objects, such as of type C. If the objects in the container are changed by its type (from type D1 to D2)
How can an object change it's type? Don't you need to erase an object and create a new one to achieve that? or value, their users can know it automatically, i.e. those information is
shared among owners and users. To erase an object in the container, first we need to ensure it is not be used by other objects.
Please help me on choose a proper container with smart pointers. I am struggling with it by trying multi-index-container, pointer container, standard container, and cannot find a good way.
My first guess would be write your own container adaptor, that uses std::set/map< shared_ptr<B>, your_compare >... Regards Kris
On Tue, Dec 20, 2011 at 6:40 PM, Krzysztof Czainski <1czajnik@gmail.com>wrote:
2011/12/20 Jayden Shui <jayden.shui@gmail.com>
Hi All,
Hi Jayden,
I have a number of named objects of type B whose name can be accessed by B::Name(). B is polymorphic. D1, D2 and so on are derived from B. I want to put them in a set or map-like container ordered by their names. They are referenced by other objects, such as of type C. If the objects in the container are changed by its type (from type D1 to D2)
How can an object change it's type? Don't you need to erase an object and create a new one to achieve that?
Yes it is.
or value, their users can know it automatically, i.e. those information
is shared among owners and users. To erase an object in the container, first we need to ensure it is not be used by other objects.
Please help me on choose a proper container with smart pointers. I am struggling with it by trying multi-index-container, pointer container, standard container, and cannot find a good way.
My first guess would be write your own container adaptor, that uses std::set/map< shared_ptr<B>, your_compare >...
Do I need std::set/map< shared_ptr<scoped_ptr<B>>, your_compare > to do it, since it is the B* shared? Thanks a lot.
Regards Kris
On 20 December 2011 17:53, Jayden Shui <jayden.shui@gmail.com> wrote:
Do I need std::set/map< shared_ptr<scoped_ptr<B>>, your_compare > to do it, since it is the B* shared? Thanks a lot.
Yes. In addition, you'll have to erase then insert whenever you change the object which scoped_ptr<B> holds, unless you have some other way of guaranteeing that B::Name() won't change when the object changes. Multiindex might be easier to use in this respect. -- Nevin ":-)" Liber <mailto:nevin@eviloverlord.com> (847) 691-1404
On Tue, Dec 20, 2011 at 7:07 PM, Nevin Liber <nevin@eviloverlord.com> wrote:
On 20 December 2011 17:53, Jayden Shui <jayden.shui@gmail.com> wrote:
Do I need std::set/map< shared_ptr<scoped_ptr<B>>, your_compare > to do it, since it is the B* shared? Thanks a lot.
Yes. In addition, you'll have to erase then insert whenever you change the object which scoped_ptr<B> holds, unless you have some other way of guaranteeing that B::Name() won't change when the object changes. Multiindex might be easier to use in this respect.
Thanks a lot! Elements in container are on heap. I just feel the somehow_container_ptr<shared_ptr<scoped_ptr<B>>> so unfriendly to developers.
On 21 December 2011 00:13, Jayden Shui <jayden.shui@gmail.com> wrote:
Elements in container are on heap. I just feel the
somehow_container_ptr<shared_ptr<scoped_ptr<B>>>
so unfriendly to developers.
Use typedef Best regards -- Mateusz Loskot, http://mateusz.loskot.net
participants (4)
-
Jayden Shui
-
Krzysztof Czainski
-
Mateusz Łoskot
-
Nevin Liber