как описать хитрый указатель на функцию...
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++ ?????
если стандартными способами это не делается, покажите, как реализовать нестандартными...
большой сенк!
this - указатель на "себя" экземпляр объекта
i - ...
j
а в функцию double getParam(int i, int j);
только два – i,j.
Т.е. первая ф-ция __thiscall, а вторая __cdecl (ну или __stdcall/__fastcall).
Я удивляюсь, зачем Borland всё это "ломает" и даёт обходить. Ведь, например, если ф-ция B::getParam не static, то она может вполне обосновано обращаться к this, а если мы её вызвали по указателю, то видимо где-то "внутрях" сохраняется инфа от какого экземпляра конкретно этот указатель на ф-цию... вообще бред какой-то.
Даю 100%, что задачу можно решить, не нарушая идей ООП