Если надо не одна а две, выход очевиден -- вместо функции используем экземпляр класса.
Правда пока непонятно, как это сделать при отсутствии нормальных конструкторов, но мысль потихоньку формируется... Возможно скоро отвечу поконкретнее.
Если надо не одна а две, выход очевиден -- вместо функции используем экземпляр класса.
Правда пока непонятно, как это сделать при отсутствии нормальных конструкторов, но мысль потихоньку формируется... Возможно скоро отвечу поконкретнее.
ок. спасибо.
нужна одна - потому как делать модификацию например всей стандартной либы МТ5 нереально. ( если и напрячься, то только порасставлять в начало всех функций одно и тоже).
Если надо не одна а две, выход очевиден -- вместо функции используем экземпляр класса.
Правда пока непонятно, как это сделать при отсутствии нормальных конструкторов, но мысль потихоньку формируется... Возможно скоро отвечу поконкретнее.
class CTraceIn { public: void Trace(const string func); // тут мы добавляем в глобальный объект ноду о вызове и делаем его топовым ~CTraceIn(); // тут мы закрываем ноду о вызове, и топовой становиться предыдущая нода }; #define _TRACE_IN_ CTraceIn __X__; __X__.Trace(__FUNCTION__);
А кто мешает сделать так?
А кто мешает сделать так?
то есть грубо говоря - деструктор для экземпляра созданного класса будет вызван при выходе из функции?
во! вот это уже вещь. ДЕСТРУКТОРЫ это СИЛА! :)))
Спасибо!
А кто мешает сделать так?
Хитрый!
:)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Допустим имеем некий код (функции, классы и т.д.)
Есть интересная задача - создать стек вызовов средствами MQL Но не просто линейный, а в виде дерева.
Где узлом дерева будет вход в функцию, а ветками - вызовы следующих функций из текущей функции узла.
Например есть такая структура функций
в результате это будет выглядеть примерно так
Обязательное условие:
В функции имеющегося кода можно добавлять всего лишь одну функцию для организации трейсинга (то есть например только в начале или перед return).
Это условие необходимо для того, что не делать большую модификацию кода, а ограничится лишь вставкой одной и той же функции трейсинга (например назовем её _TRACE_IN_) - во все имеющиеся функции кода.
Буду рад услышать любые идеи или варианты.
Как ни кручу - натыкаюсь на замкнутый круг, что надо вызывать не одну, а две функции для формирования такого дерева. А надо по-любому только одна. :)