Re: Указатель на метод объекта класса. Возможно?
От: Кодт Россия  
Дата: 29.03.10 22:56
Оценка: 2 (1)
Здравствуйте, MTimur, Вы писали:

MT>Очевидное решение — изменить someforeignfunc так, чтобы принимала pma, но эта функция "не моя".

MT>Понимаю, что никак, но надеюсь, что ошибаюсь

Можно с рядом ограничений.

1) Синглетон
// присвой нужные значения перед вызовом
static A* object;
static pma method;
void invoke() { (object->*method)(); }

Нельзя одновременно создавать произвольное количество РАЗНЫХ замыканий.
Хотя, можно завести пул функций invoke1, invoke2, ... — и для каждой свой комплект статических данных.

2) Санки
struct Thunk
{
  char bytecode[XZ];
  void generate(A* object, pma method)
  {
    // здесь рожаем байткод для функции invoke()
    // в который подставляем значения object и method
  }
  pa get_invoke() { return (pa)bytecode; }
};

Это платформенно-зависимый подход. Для разных процессоров — разная реализация.
Используется в ATL, кстати. Можно попробовать оттуда выдрать.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.