Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

как описать хитрый указатель на функцию...

Аноним
есть:

typedef double (*FuncGetParam)(int i,int j);

// некий класс, содержащий указатель на функцию
class A
{
public :

FuncGetParam func; // указатель на функцию

double getParam(int i, int j);
};


// это произвольный класс
class B
{
public :

double getParam(int i, int j);
};


// это произвольная функция...
double freeGetParam(int i, int j)
{
return 1.0;
}


надо сделать так, чтобы чтобы можно было присвоить указатель на произвольную функцию (совпадающую по передаваемым параметрам и возвращаемому результату), которая может быть как в самом классе "A", в другом классе "B", а может быть и просто отдельной функцией!


{
A a;
B b;

// надо, чтобы все эти варианты могли работать
A.func = a.getParam;
A.func = b.getParam;
A.func = freeGetParam;
}

в С++ Builder это делается определением функции вот таким способом:
typedef double (__closure *FuncGetParam)(int i,int j);
ключевое слово - "__closure"
как такое же сделать в Visual C++ ?????

если стандартными способами это не делается, покажите, как реализовать нестандартными...

большой сенк!
380
06 марта 2002 года
Arestov
285 / / 20.09.2000
По правилам C++ в B::getParam передаются параметры:
this - указатель на "себя" экземпляр объекта
i - ...
j
а в функцию double getParam(int i, int j);
только два – i,j.

Т.е. первая ф-ция __thiscall, а вторая __cdecl (ну или __stdcall/__fastcall).

Я удивляюсь, зачем Borland всё это "ломает" и даёт обходить. Ведь, например, если ф-ция B::getParam не static, то она может вполне обосновано обращаться к this, а если мы её вызвали по указателю, то видимо где-то "внутрях" сохраняется инфа от какого экземпляра конкретно этот указатель на ф-цию... вообще бред какой-то.

Даю 100%, что задачу можно решить, не нарушая идей ООП
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог