Я пытаюсь реализовать делегат на С++, но не понимаю, как на самом деле передать делегат в функцию.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Я пытаюсь реализовать делегат на С++, но не понимаю, как на самом деле передать делегат в функцию.

Сообщение Anonymous »

Я пытаюсь просто использовать код из этой статьи: http://blog.coldflake.com/posts/C++-del ... -steroids/
Итак, делегат это:

Код: Выделить всё

class Delegate
{
typedef void (*Type)(void* callee, int);
public:
Delegate(void* callee, Type function)
: fpCallee(callee)
, fpCallbackFunction(function) {}
template 
static Delegate from_function(T* callee)
{
Delegate d(callee, &methodCaller);
return d;
}
void operator()(int x) const
{
return (*fpCallbackFunction)(fpCallee, x);
}
private:
void* fpCallee;
Type fpCallbackFunction;
template 
static void methodCaller(void* callee, int x)
{
T* p = static_cast(callee);
return (p->*TMethod)(x);
}
};
И вот класс с функцией, которую я хочу использовать:

Код: Выделить всё

class A
{
public:
void foo(int x)
{
printf("foo called with x=%d\n", x);
}
void bar(int x) {}
};
И он показывает, как его использовать здесь:

Код: Выделить всё

int main()
{
A a;
Delegate d = Delegate::from_function(&a);
d(42);
}
Это прекрасно работает, но идея состоит в том, чтобы иметь возможность фактически передавать этот делегат в функцию без каких-либо зависимостей.
Итак, если у меня есть новая функция, которая принимает строку и печатает ее...

Код: Выделить всё

void printString(const std::string& str) {
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79206051/im-trying-to-implement-a-delegate-in-c-but-i-dont-understand-how-to-actuall[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»