Russian Qt Forum

Программирование => С/C++ => Тема начата: Eugene Efremov от Сентябрь 01, 2008, 23:28



Название: ссылки на методы в качестве параметров шаблна
Отправлено: Eugene Efremov от Сентябрь 01, 2008, 23:28
Дано:

Код:
template<class type, void (type::*fun)()> class caller
{
type *ptr;

public:
caller(type *p) : ptr(p) {}

void operator()()
{
(ptr->*fun)();
}
};

Вопрос: можно ли переписать это дело так, чтобы вызов метода происходил напрямую, без использования указателей на члены: ptr->fun() ?

Думается мне, что нельзя, во всяком случае, напрямую написать что-нибудь вроде template<class type, void (type::fun)()> или template<class type, void (type::&fun)()> не получится...  Но вдруг?..


Название: Re: ссылки на методы в качестве параметров шаблна
Отправлено: Tonal от Сентябрь 02, 2008, 08:04
В чистом С++ нельзя. А в диалектах есть немного: __closure в багланде и extern в gcc.
В новом стандарте будут лямбды и замыкания - они должны решить эту проблему. :)

Ну а если не терпится - есть Boost.Bind и Boost.Function, чтобы не изобретать великов. :)