forked from rosh/MQL5Book
88 lines
2.9 KiB
MQL5
88 lines
2.9 KiB
MQL5
//+------------------------------------------------------------------+
| |||
//| TemplatesSimpleArray.mq5 |
| |||
//| Copyright 2021, MetaQuotes Ltd. |
| |||
//| https://www.mql5.com |
| |||
//+------------------------------------------------------------------+
| |||
| |||
#include "..\..\Include\AutoPtr.mqh"
| |||
#include "..\..\Include\SimpleArray.mqh"
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Dummy class |
| |||
//+------------------------------------------------------------------+
| |||
class Dummy
| |||
{
| |||
int x;
| |||
public:
| |||
Dummy(int i) : x(i) { }
| |||
/*
| |||
// Copying of objects can be resource-consuming, especially
| |||
// if many temporary objects are passed back and forth.
| |||
// Copy-constructor does not exist by default,
| |||
// so don't add it, unless overheads are managed somehow,
| |||
// implemenation below is shown just for reference
| |||
Dummy(const Dummy &d)
| |||
{
| |||
x = d.x;
| |||
}
| |||
*/
| |||
int value() const
| |||
{
| |||
return x;
| |||
}
| |||
};
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Test struct |
| |||
//+------------------------------------------------------------------+
| |||
struct Properties
| |||
{
| |||
int x;
| |||
string s;
| |||
};
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Script program start function |
| |||
//+------------------------------------------------------------------+
| |||
void OnStart()
| |||
{
| |||
// storage for class objects
| |||
SimpleArray<AutoPtr<Dummy>> arrayObjects;
| |||
AutoPtr<Dummy> ptr = new Dummy(20);
| |||
arrayObjects << ptr;
| |||
arrayObjects << new AutoPtr<Dummy>(new Dummy(30));
| |||
Print("Size: ", arrayObjects.size());
| |||
arrayObjects.print(); // prints nothing for classes/pointers
| |||
Print(arrayObjects[0][].value());
| |||
Print(arrayObjects[1][].value());
| |||
| |||
// storage for numbers
| |||
SimpleArray<double> arrayNumbers;
| |||
arrayNumbers << 1.0 << 2.0 << "3.0";
| |||
arrayNumbers.print();
| |||
| |||
// storage for struct objects
| |||
SimpleArray<Properties> arrayStructs;
| |||
Properties prop = {12345, "abc"};
| |||
arrayStructs << prop;
| |||
arrayStructs.print();
| |||
| |||
/*
| |||
// will work if Dummy has a copy constructor
| |||
SimpleArray<Dummy> good;
| |||
good << new Dummy(0);
| |||
*/
| |||
| |||
// NB: SimpleArray is intended for objects, not pointers!
| |||
// It's supposed to use AutoPtr object as a wrapper for pointers.
| |||
| |||
// ERRORs below (all break in SimpleArray.mqh)
| |||
| |||
// SimpleArray<Dummy> array;
| |||
// object of 'Dummy' cannot be returned,
| |||
// copy constructor 'Dummy::Dummy(const Dummy &)' not found
| |||
| |||
// SimpleArray<Dummy*> array;
| |||
// '*' - object pointer expected
| |||
}
| |||
//+------------------------------------------------------------------+
|