通用类库 - 错误、说明、问题、使用功能和建议 - 页 25 1...181920212223242526272829303132...38 新评论 TheXpert 2019.04.03 10:58 #241 Andrey Pogoreltsev:只是,如果它们只适用于嵌入式类型,为什么要创建集合并把它们放在kodobase中)?它们对嵌入式结构也不好。 Igor Makanu 2019.04.03 11:50 #242 Andrey Pogoreltsev:告诉我,也许我不明白什么,但如果我试图使用这种类型的结构。 我得到一个错误。 'Option' - 对象只通过引用传递 ICollection.mqh 14 18 而接下来有一整堆的错误...这将不会起作用,通过一个模板需要做的模板,我也曾处理过这个问题,这里是一个测试的例子,它似乎工作正常 class CData - 我们要存储在列表中的结构。 CDataBase - 列表本身 #property strict #include <Arrays\List.mqh> //+------------------------------------------------------------------+ class CData : public CObject { public: int x; double y; datetime t; }; //+------------------------------------------------------------------+ template<typename TDB>class CDataBase { private: CList *mlist; TDB *TDBptr; public: void CDataBase() { mlist=new CList; } void ~CDataBase(void) { delete mlist; } int ArraySize(void) { return(mlist.Total()); } TDB *operator[](int index) { return(mlist.GetNodeAtIndex(index)); } void AddValue (TDB &value){ TDBptr = new TDB; TDBptr = value; mlist.Add(TDBptr); } string TypeName() { return(typename(TDB)); } }; //+------------------------------------------------------------------+ // проверка, запишем распринтуем значения void OnStart() { CDataBase<CData>*data=new CDataBase<CData>; CData *my=new CData; int i; Print("1------------------------------------"); for(i=0; i<10; i++) { my.x=i; my.y= i*2; data.AddValue(my); Print(i," : ",data[i].x," , ",data[i].y," / ",my.x," ,",my.y); } Print("2------------------------------------"); for(i=0; i<data.ArraySize(); i++) { Print(i," : ",data[i].x," , ",data[i].y); } Print(data.TypeName()); delete my; delete data; } //+------------------------------------------------------------------+ 在OnStart()中,我们创建了一个列表,向其中写入数值,然后读取它们。 我检查了2次,因为一开始在向列表写入时,我失去了一个局部变量 的可见性--我过去写的时候一切正常,但当我读取时,我得到了空指针和错误 Vasiliy Sokolov 2019.04.03 12:27 #243 Igor Makanu:它不会那样工作,你必须使用模板,我也在处理这个问题,我做了一个测试的例子,它似乎都能正常工作。 class CData - 我们想要存储在列表中的结构 CDataBase - 列表本身 在OnStart()中--创建一个列表,向其中写入数值,然后读取它们。 我检查了两次,因为首先在向列表写入时,我失去了某个局部变量 的可见性--我在写入时一切正常,但在读取时,我得到了空指针和一个错误你的代码可以工作,因为CData仍然是一个类,而不是一个结构。如果你试图同时对类和结构使用生成器,你会遇到问题,特别是在删除操作符方面。通过我自己对这种 "通用 "的实验,我对它深信不疑。问题是,这个 "通用 "库根本没有删除操作符,如果你在这样一个 "集合 "中添加一个新的类,在退出程序后会有很多丢失的对象。也就是说,很明显,最初这个泛型是只为原始类型而写的。 Igor Makanu 2019.04.03 12:34 #244 Vasiliy Sokolov:这段代码对你有用,因为CData是一个类,而不是一个结构。如果你试图对类和结构同时使用泛型,你会有问题,特别是在删除操作符方面。通过我自己对这种 "通用 "的实验,我对它深信不疑。问题是,这个 "通用 "库根本没有删除操作符,如果你在这样一个 "集合 "中添加一个新的类,在退出程序后会有很多丢失的对象。也就是说,你可以看到这个泛型最初只为原始类型而写。我已经停止在MQL中使用结构了,结构没有任何优势,但是在使用结构的过程中会不断出现bug和浪费时间--我看了老管理员关于结构问题的帖子,他们基本上会说使用类而不是结构--我现在根本不使用结构了 SZZ: 我在停止使用结构时发现了这个https://www.mql5.com/ru/forum/6343/page866#comment_7541747 Вопросы от начинающих MQL5 MT5 MetaTrader 5 2018.05.23www.mql5.com Подскажите пожалуйста, такой показатель тестера в жизни реален? И хороший это или плохой результат за год с депо 3000... fxsaber 2019.04.03 12:34 #245 Andrey Pogoreltsev:如果它们只适用于嵌入式类型,为什么要创建集合并把它们放在kodobase中呢?)作为标准的便利性。因此,不需要拉 - 每个用户都有一个。 我在我的一个KB库里长期使用这个。 Andrey Pogoreltsev 2019.04.04 09:01 #246 Igor Makanu:它不会那样工作,你必须使用模板,我也在处理这个问题,我做了一个测试的例子,它似乎都能正常工作。 class CData - 我们想要存储在列表中的结构 CDataBase - 列表本身 在OnStart()中--创建一个列表,向其中写入数值,然后读取,我检查了2次,因为起初在某个地方,当向列表写入时,我失去了一个局部变量 的可见性--我曾经写入一切都很好,但当我读取时,我得到了空指针的读取,得到了一个错误。首先,你在一个列表上实现了你的分配器,并在那里存储指针。不仅如此,你在销毁时还会有漏网之鱼)。 第二,你应该正确地使用复制构造函数而不是赋值运算符。但这都是IMHO) 而最重要的是:开发者只需要最终确定泛型,在里面做分配器并支持自定义对象。C++已经为他们发明了一切)而我们也不需要发明自行车。 Igor Makanu 2019.04.04 10:01 #247 Andrey Pogoreltsev:首先,你已经在一个列表上实现了你的分配器,并在那里存储了指针。不仅如此,你在销毁时还有漏网之鱼)你是如何检测出泄漏的? SZZ:这是一个测试例子,我必须弄清楚如何在MQL中处理列表,所以我做了测试。 TheXpert 2019.04.04 10:04 #248 Andrey Pogoreltsev:而最重要的是:开发者应该直接完成泛型,在里面做分配器,并支持自定义对象。C++已经为他们发明了一切)而我们也不需要发明自行车。如果这么简单就写吧。 Andrey Pogoreltsev 2019.04.04 17:07 #249 Igor Makanu:如何检测到泄漏的? ZS:这是一个测试例子,我必须弄清楚如何在MQL中处理列表,所以我做了测试。你在AddValue中通过new创建了对象的副本,但你并没有在析构器中释放它们,你只是清除了指针列表。 Andrey Pogoreltsev 2019.04.04 17:09 #250 TheXpert:如果有那么简单,就写吧。当我有时间和需要时,我就会写。而一般来说,作为一个例子,如果你只需要一个轴承型号,建立自己的轴承厂并不是一个好主意) 1...181920212223242526272829303132...38 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
只是,如果它们只适用于嵌入式类型,为什么要创建集合并把它们放在kodobase中)?
它们对嵌入式结构也不好。
告诉我,也许我不明白什么,但如果我试图使用这种类型的结构。
我得到一个错误。
'Option' - 对象只通过引用传递 ICollection.mqh 14 18
而接下来有一整堆的错误...这将不会起作用,通过一个模板需要做的模板,我也曾处理过这个问题,这里是一个测试的例子,它似乎工作正常
class CData - 我们要存储在列表中的结构。
CDataBase - 列表本身
在OnStart()中,我们创建了一个列表,向其中写入数值,然后读取它们。 我检查了2次,因为一开始在向列表写入时,我失去了一个局部变量 的可见性--我过去写的时候一切正常,但当我读取时,我得到了空指针和错误
它不会那样工作,你必须使用模板,我也在处理这个问题,我做了一个测试的例子,它似乎都能正常工作。
class CData - 我们想要存储在列表中的结构
CDataBase - 列表本身
在OnStart()中--创建一个列表,向其中写入数值,然后读取它们。 我检查了两次,因为首先在向列表写入时,我失去了某个局部变量 的可见性--我在写入时一切正常,但在读取时,我得到了空指针和一个错误
你的代码可以工作,因为CData仍然是一个类,而不是一个结构。如果你试图同时对类和结构使用生成器,你会遇到问题,特别是在删除操作符方面。通过我自己对这种 "通用 "的实验,我对它深信不疑。问题是,这个 "通用 "库根本没有删除操作符,如果你在这样一个 "集合 "中添加一个新的类,在退出程序后会有很多丢失的对象。也就是说,很明显,最初这个泛型是只为原始类型而写的。
这段代码对你有用,因为CData是一个类,而不是一个结构。如果你试图对类和结构同时使用泛型,你会有问题,特别是在删除操作符方面。通过我自己对这种 "通用 "的实验,我对它深信不疑。问题是,这个 "通用 "库根本没有删除操作符,如果你在这样一个 "集合 "中添加一个新的类,在退出程序后会有很多丢失的对象。也就是说,你可以看到这个泛型最初只为原始类型而写。
我已经停止在MQL中使用结构了,结构没有任何优势,但是在使用结构的过程中会不断出现bug和浪费时间--我看了老管理员关于结构问题的帖子,他们基本上会说使用类而不是结构--我现在根本不使用结构了
SZZ: 我在停止使用结构时发现了这个https://www.mql5.com/ru/forum/6343/page866#comment_7541747
如果它们只适用于嵌入式类型,为什么要创建集合并把它们放在kodobase中呢?)
作为标准的便利性。因此,不需要拉 - 每个用户都有一个。
我在我的一个KB库里长期使用这个。
它不会那样工作,你必须使用模板,我也在处理这个问题,我做了一个测试的例子,它似乎都能正常工作。
class CData - 我们想要存储在列表中的结构
CDataBase - 列表本身
在OnStart()中--创建一个列表,向其中写入数值,然后读取,我检查了2次,因为起初在某个地方,当向列表写入时,我失去了一个局部变量 的可见性--我曾经写入一切都很好,但当我读取时,我得到了空指针的读取,得到了一个错误。
首先,你在一个列表上实现了你的分配器,并在那里存储指针。不仅如此,你在销毁时还会有漏网之鱼)。
第二,你应该正确地使用复制构造函数而不是赋值运算符。但这都是IMHO)
而最重要的是:开发者只需要最终确定泛型,在里面做分配器并支持自定义对象。C++已经为他们发明了一切)而我们也不需要发明自行车。
首先,你已经在一个列表上实现了你的分配器,并在那里存储了指针。不仅如此,你在销毁时还有漏网之鱼)
你是如何检测出泄漏的?
SZZ:这是一个测试例子,我必须弄清楚如何在MQL中处理列表,所以我做了测试。
而最重要的是:开发者应该直接完成泛型,在里面做分配器,并支持自定义对象。C++已经为他们发明了一切)而我们也不需要发明自行车。
如果这么简单就写吧。
如何检测到泄漏的?
ZS:这是一个测试例子,我必须弄清楚如何在MQL中处理列表,所以我做了测试。
你在AddValue中通过new创建了对象的副本,但你并没有在析构器中释放它们,你只是清除了指针列表。
如果有那么简单,就写吧。
当我有时间和需要时,我就会写。而一般来说,作为一个例子,如果你只需要一个轴承型号,建立自己的轴承厂并不是一个好主意)