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
| |
}
| |
//+------------------------------------------------------------------+
|