Сообщение Re[8]: Метод класс как С колбек от 10.04.2015 15:54
Изменено 10.04.2015 15:59 beyv
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Здравствуйте, beyv, Вы писали:
B>>Даа, умеет. Задача автора: "Метод класс как С колбек" а не "простой указатель на фукнцию"
EP>Прочитай изначальное сообщение, а не только его заголовок.
Прочитайте исходные код FastDelegate, прежде чем умничать.
Основная загвоздка у ТС получения доступа к полям класса в теле колбека или где там.
Пожалуйста, получите от делегата указатель "This", приведите его к классу и вот вам класс
EP>Здравствуйте, beyv, Вы писали:
B>>Даа, умеет. Задача автора: "Метод класс как С колбек" а не "простой указатель на фукнцию"
EP>Прочитай изначальное сообщение, а не только его заголовок.
Прочитайте исходные код FastDelegate, прежде чем умничать.
Основная загвоздка у ТС получения доступа к полям класса в теле колбека или где там.
Пожалуйста, получите от делегата указатель "This", приведите его к классу и вот вам класс
#include "stdafx.h"
#include "FastDelegate.h"
using namespace fastdelegate;
// Это класс
class CClass {
protected:
char *m_name;
public:
CClass(char *name) : m_name(name) {};
// Это метод класса
int Function(int num, char *str) {
printf("In Function in %s. Num=%d, str = %s\n", m_name, num, str); return -1;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
typedef FastDelegate2<int, char *, int> FunctionDelegate;
// Создаете класс
CClass a("Base A");
// "deleg" - переменная-колбек, цепляем на неё метод класса
FunctionDelegate deleg;
// можем передать его куда угодно
deleg = MakeDelegate(&a, &CClass::Function);
// можем использовать как функцию
deleg(7, "tr");
// Чуть поизвращаясь, можно получить указатель на сам класс
const detail::ClosurePtr<int, char *, int>& p = (const detail::ClosurePtr<int, char *, int>&)deleg.GetMemento();
CClass* ap = (CClass*)p.GetClosureThis();
// Получили класс со всеми потрохами
ap->Function(77, "ааааа");
return 0;
}
Re[8]: Метод класс как С колбек
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Здравствуйте, beyv, Вы писали:
B>>Даа, умеет. Задача автора: "Метод класс как С колбек" а не "простой указатель на фукнцию"
EP>Прочитай изначальное сообщение, а не только его заголовок.
Прочитайте исходные код FastDelegate, прежде чем умничать.
Основная загвоздка у ТС получения доступа к полям класса в теле колбека или где там.
Пожалуйста, получите от делегата указатель "This", приведите его к классу и вот вам класс
EP>Здравствуйте, beyv, Вы писали:
B>>Даа, умеет. Задача автора: "Метод класс как С колбек" а не "простой указатель на фукнцию"
EP>Прочитай изначальное сообщение, а не только его заголовок.
Прочитайте исходные код FastDelegate, прежде чем умничать.
Основная загвоздка у ТС получения доступа к полям класса в теле колбека или где там.
Пожалуйста, получите от делегата указатель "This", приведите его к классу и вот вам класс
#include "stdafx.h"
#include "FastDelegate.h"
using namespace fastdelegate;
// Это класс
class CClass {
protected:
char *m_name;
public:
CClass(char *name) : m_name(name) {};
// Это метод класса
int Function(int num, char *str) {
printf("In Function in %s. Num=%d, str = %s\n", m_name, num, str); return -1;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
typedef FastDelegate2<int, char *, int> FunctionDelegate;
// Создаете класс
CClass a("Base A");
// "deleg" - переменная-колбек
FunctionDelegate deleg;
// цепляем на неё метод класса и можем передать его куда угодно
deleg = MakeDelegate(&a, &CClass::Function);
// можем использовать как функцию
deleg(7, "tr");
// Чуть поизвращаясь, можно получить указатель на сам класс
const detail::ClosurePtr<int, char *, int>& p = (const detail::ClosurePtr<int, char *, int>&)deleg.GetMemento();
CClass* ap = (CClass*)p.GetClosureThis();
// Получили класс со всеми потрохами
ap->Function(77, "ааааа");
return 0;
}