gpt4 book ai didi

c++ - 集合中的不可变对象(immutable对象)(C++ 和 Qt)

转载 作者:搜寻专家 更新时间:2023-10-31 01:13:26 26 4
gpt4 key购买 nike

我坚持将不可变对象(immutable对象)与集合一起使用。假设我有以下类(class):

 //in .h
class Data {
public:
Data(const DataObj& data);
Data(const Data&);
const DataObj& getDataObj() const;
private:
const DataObj _data; //actually several objects or simple type
}

inline const DataObj& Data::getDataObj() const {return _data};

//in .c
Data(const DataObj& data) : _data(data){};
Data(const Data& original) : _data(original._data){}

问题是当我想使用集合时,出现错误

   in member function Data&Data::operator(const Data&);
instantiation from 'typename QMap<Key,T>::iterator QMap<Key, T>::insert(const Key&, const T&)[with Key = int, T = Data]'
instantiation from here
error : non-static const member 'const DataObj Data::_data', can't use default assignment operator

现在定义一个赋值运算符似乎没有意义,因为它的原型(prototype)将是

 Data& operator=(const Data&);

我该怎么办?我是否被迫删除所有常量限定符以便在集合中使用我的类?还是使用指针?

最佳答案

如果你像这样实例化你的 map

QMap <MyKey, Data> 

我想您应该始终为数据定义一个赋值运算符(默认或您自己的)。

你应该像你建议的那样尝试使用指针

QMap <Mykey, Data*> 
QMap <Mykey, QSharedPointer<Data>>

如果您查看 QMap 代码 http://code.woboq.org/kde/include/QtCore/qmap.h.html ,一些运算符/成员返回 < T >,因此需要定义赋值。

关于c++ - 集合中的不可变对象(immutable对象)(C++ 和 Qt),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12495226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com