понедельник, 25 января 2021 г.

Сделал класс COut и функцию вывода в поток

 Долго думал, как реализовать возможность использовать в качестве выбранного объекта и переменную, которые хранятся в таблице заголовков, и значение со стека - наконец понял, что мне нужен отдельный класс выбранного объекта SelectedObject, который сам по себе абстрактен, а для работы непосредственно с объектом используется одна из его реализаций - либо SelectedRecord, либо SelectedValue.

Таким образом это позволило сделать реализацию класса стандартного потока вывода COut, переменную которого теперь можно стало копировать и использовать либо как значение для переменной-копии, либо просто как значение со стека.

Использование класса COut для вывода текста на терминал

Думал, что будет сложно, но всё оказалось довольно просто, зато сам код функций-методов заметно упростится. 

По сути это была первая функция - регулярный метод класса, и я сразу же столкнулся с необходимостью абстрагировать код функции от того, как именно он вызывается. Там ещё будет над чем поработать, но то, что сделано, работает отлично.

Отлично в том смысле, что всё происходит как будто само собой. Нет каких-то специальных случаев использования, которые мне пришлось бы программировать дополнительно. Даже значение переменной копируется само - я лишь добавил функцию 'data_size' в класс COut.

Вот теперь наконец я могу переходить к работе над пользовательскими функциями, но возможно стоит добавить какую-нибудь арифметическую операцию (например - сложение) в классы интегральных типов, для того, чтобы убедиться, что работает например такая операция как

$ + $

То есть: выбранный объект - значение с вершины стека, к нему прибавляем значение с вершины стека, то есть само себя. И результат кладём на стек.

Как это будет работать, пока неочевидно. Может заработать само по себе, а может придётся придумывать реализацию.

Планирую добавить адресацию вида $0, $1, $2 и т.д., чтобы не заставлять пользователя городить огород из операций по перестановке данных на стеке. Просто $ будет синонимом $0.

Комментариев нет: