Двойная диспетчеризация (C++)
[info]topright
Логарифмический двойной диспетчер. См. http://en.wikipedia.org/wiki/Multiple_dispatch и http://research.att.com/~bs/multimethods.pdf (пока не попало в стандарт C++). Реализация основана на идее из книги Александреску "Modern C++ Design", глава 11.6. Для хранения/поиска вызовов используется std::map. Из недостатков: диспетчер неправильно работает с механизмом наследования. Александреску загадочно намекает, что решение существует, но не сообщает его.

Dispatcher2 )

Usage )

Есть и такая реализация: http://blog.emptycrate.com/node/288. Её основной минус? В operator() в цикле используются виртуальные вызовы, dynamic_cast и (sic!) для перехода к следующей итерации бросаются исключения. :) Всё это медленно по отдельности, а вместе - совсем не санки. Зато плюс: благодаря dynamic_cast начинает работать механизм наследования.
Tags:

Recursive Makefile Rule to Avoid Stamps
Daria Morgendorffer
[info]codedot
# @(#)Makefile	1.10

CFLAGS = -g -Icore -Icore/machine -Icore/machine/base
YFLAGS = -dv

LIBS = core/lib.a core/machine/lib.a core/machine/base/lib.a

test: all test.mlc
	./mlc <test.mlc

all: libs
	$(MAKE) mlc

mlc: parser.o lexer.o $(LIBS)

libs:
	cd core && $(MAKE)

source: parser.y lexer.l mlc.c test.mlc
	cd core && $(MAKE) source

clean:
	-rm -f mlc y.* *.o
	-sccs clean
	cd core && $(MAKE) clean
Tags:

You are viewing the community [info]code_review