Моделирование фондовой биржи
Определение делегата
В файле Engine.h объявлены два делегата.
_delegate void TickCallback(int ticks); _delegate void TradeCallback( int ticks, String *pStock, int price, int volume);
Как мы уже знаем, делегат подобен классу, так что экземпляр делегата создается с помощью оператора new (создать).
TickCallback *pTickDlg = new TickCallback(0, PrintTick); //0 для статического TradeCallback *pTradeDlg = new TradeCallback(0, PrintTrade); //0 для статического
Имя метода передается делегату в качестве аргумента его конструктора. Сигнатура метода должна совпадать с сигнатурой делегата.
static void PrintTick(int ticks) { Console::Write("{0} ", _box(ticks)); if (++printcount == LINECOUNT) { Console::WriteLine(); printcount = 0; } } static void PrintTrade( int ticks, String *pStock, int price, int volume) { if (printcount!= 0) { Console::WriteLine(); } printcount = 0; Console::WriteLine("{0.4} {l,-4} {2.4} {3.4}", _box(ticks), pStock, _box(price), _box(volume)); }
Передача информации о делегате эмулятору
Класс Admin (Управляющий модуль) передает информацию об используемом делегате классу Engine (Машинный модуль) при вызове конструктора класса Engine (Машинный модуль).
Engine *pEngine = new Engine(pTickDlg, pTradeDlg);