Не совсем уверен, что в нужный форум, но всё же.
Прочитал статью:
http://www.codeproject.com/Articles/11015/The-Impossibly-Fast-C-Delegates?rp=/KB/cpp/ImpossiblyFastCppDelegate/SRDelegates.zip
решение понравилось, особенно в той части, что не нужно аллоцировать память. Но не очень понравился синтаксис передачи адреса функции через параметр шаблона.
Немного поразмыслив получился такой код (если сообщество затребует, помещу прямо тут):
* Главный файл (delegate.h):
http://pastebin.com/BfE1Py5v
* Реализация (delegate_impl.h):
http://pastebin.com/pQKESLGi
Использование:
delegate(void()) d1 = make_delegate(&foo);
delegate(int(int)) d2 = make_delegate(&obj, &SomeObj::baz);
Кто какие проблемы видит? Мне не нравится reintepret_cast во враппере свободной функции... Может есть другие решения?
PS если в реализации delegate_impl.h убрать все макросы, получится реализация для delegate(R())