Идея отличная. Но тут многие не знают про ООП. И не желают ((
А некоторые желают, но не могут осилить.
Прогулялся,,,. подумал
Как собираетесь разобраться с указателями
STL полностью построена на них
А некоторые желают, но не могут осилить.
***
Недели две назад занимался исcледованиями в этом направлении.
Контейнер для любого типа данных можно реализовать стандартными средствами MQL (с помощью шаблонов) без применения макросов.
На текущий момент выполнены основные работы в сторону реализации "умного" контейнера на MQL.
Контейнер самостоятельно определяет используемый тип данных (класс, указатель, POD структура, не POD структура, string,...). Ожидается поддержка всех типов "из коробки" (за исключением union).
Так для классов, структур и указательной будет проверяться наличие реализованных операторов сравнения и равенства, а так же функций Equals, Compare.
struct Info{ int ID; string data; booloperator=(Info &obj){ returnthis.ID == obj.ID; } }
Нужно просто реализовать нужный метод и информация о его наличии, как в случаи с operator= выше, будет использована для выбора лучшей модели поведения, например в реализации функции поиска, проверки вхождения или сортировки.
При этом от пользователя не требуя ни каких действий по конфигурации контейнера вообще.
Основные работы по реализации заявленного функционала уже выполнены, но для их завершения необходимо:
- дождаться выхода обновления с внедрением пространства имен;
- дождаться фикса ряда багов с указателями на функции;
Ждёмс...
***
Это ты вторую готовишь к замужеству? Раньше была Оля, я правильно помню:)))
// comp - binary predicate which returns true if the first argument is less than // (i.e. is ordered before) the second. The signature of the predicate function // should be equivalent to the following: comp::cb(const Type1 &a, const Type2 &b). // Returns index pointing to the first element that is not less than value, or last // if no such element is found. template<typename Vector, typename T, typename Comp> uint lower_bound(const Vector &vect, uint first, uint last, const T &value, Comp &comp) { uint count = last - first; uint res = first; while (count != 0) { uint it = res; uint step = count / 2; it += step; if(comp.cb(vect.a[it], value)) { res = ++it; count -= step + 1; } else count = step; } return res; } //--------------- Пример------------: struct S { uint order; double data; }; class Comp { public: bool cb(const S &f, uint s) {return f.order < s;} }; void OnStart() { vector_ref<S> v; S s; for (uint i = 10; i < 40; i+=2) { s.order = i; v.push_back(s); } Comp cmp; uint value = 19; uint res = lower_bound(v, 0, v.size(), value, cmp); if ( res == v.size() ) Alert("not found"); else Alert("index = ", res, " value = ", v.a[res].order); // Alert: index = 5 value = 20 }
Думаю, что нет смысла заморачиваться с upper_bound() и реверсом, легко реализуется через lower_bound().
На мой взгляд, этот "набор" покрывает большинство задач.
1. vector
И зачем всю портянку помещать внутрь макроса? Если требуется лишь один метод с REF, то его и засунуть в макрос. А всё остальное вынести в базовый класс.
p.s. А вообще всё легко делается и без макросов:
template<typename T> class vector_ref { public: void push_back(const T & value); }; template<typename T> class vector : public vector_ref<T> { public: void push_back(T value) { vector_ref<T>::push_back(value); } };
И зачем всю портянку помещать внутрь макроса? Если требуется лишь один метод с REF, то его и засунуть в макрос. А всё остальное вынести в базовый класс.
Пришлось из-за мкл ограничений, нельзя передать в функцию с сигнатурой void fn(const int &) литерал: fn(5). Поэтому решил генерить две версии: для фундаментальных типов и для пользовательских (сигнатура для фундаментальных без ссылки (для передачи литералов без головняков), а для пользовательских с оной).
ЗЫ:
оказывается, что можно даже так:
class S { public: void f(int i) {} void f(const int &i) {} }; start() { S s; s.f(5); }и не будет никакой неопределённости. Я не знал что так можно, в плюсах ошибка. Ну и х.з. насколько можно полагаться на это ...

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Стандартная библиотека как-то совсем не зашла. Предлагаю здесь делиться STL подобными поделками.
1. vector
2. сортировка. Пузырьковую удалил, слишком высока сложность вычисления. Сортировка слиянием: