对于我的GUI,我需要一个具有以下目的的类来管理控件(窗口,按钮等)
[index]
["key"]
ptr=&container[index]
如果添加或删除元素,则不会更改container2=conatiner1
(深拷贝)ptr1=container[1]
和ptr2=container[2]
,则在交换1和2的顺序之后,ptr1==container[2]
和ptr2==container[1]
我得出结论,std :: list为我需要的指针和std :: vector提供了随机访问的稳定性.所以我有想法在向量中存储std字符串和迭代器的元组.但是,复制容器后迭代器都无效.
关于如何最好地解决这个问题的任何建议?
这里是当前方法的主要代码(仅包括重要部分):
template < class T >
class ControlList
{
struct Tuple{std::string first;typename std::list<T>::iterator second;};
std::vector<Tuple> list;
std::list<T> objects;
inline T& operator [](int i)
{
return *list[i].second;
}
inline T& operator [](std::string s)
{
loopi(0,vlist.size())
if(s==vlist[i].first)
return *vlist[i].second;
}
}
Run Code Online (Sandbox Code Playgroud)
字符串访问速度很慢,但通常容器的元素不超过10个,并且在程序中很少使用它.
更新:
共享指针已经很好了,但无法解决我需要的深拷贝.可以说我有window2 = window1.现在,如果我有一个共享指针,那么按下window2中的按钮也会在window1中按下相同的按钮,这是不需要的.我真的需要容器中包含的所有对象的新实例.
是否可以覆盖复制构造函数来创建智能指针引用的对象的新实例?
窗口和按钮都存储在a中ControlList
,其中窗口包含多个列表.
UPDATE2:
覆盖复制构造函数和赋值构造函数显然已经解决了这个问题
UPDATE3:
我刚刚发布了这个课程用于麻省理工学院的GUI.