Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > тип функция класса


Автор: Saygak 27.7.2009, 21:47
Задумал я реализовать поиск минимум функции одной методом золотого сечения и функции 2х переменных методом координатного спуска (используя метод золотого сечения по каждой из переменной). В реализации этого всего решил использовать классы. Переменная функция описана в виде типа. Если хочу описать тип функция пишу:
Код

typedef double (__closure *TFunc)(double x);

Код

type
  TFunc = function(X: Double): Double of object;


Вопрос: как это дело описать в MinGW (если правильно понял, то это он используется в wxDev-C++)

P.S.
Привожу хеадер билдеровского файла
Код

//---------------------------------------------------------------------------

#ifndef SearchPlaneH
#define SearchPlaneH
//---------------------------------------------------------------------------

#include <vector>

//using namespace std;


typedef struct _T3DPoint{
    double X, Y, Z, T;
} T3DPoint;

typedef std::vector<T3DPoint> T3DPointArray;

typedef double (__closure *Func)(double x);

#define GOLD       0.38196601125010515180
#ifndef M_PI
#define M_PI       3.14159265358979323846
#endif
#define DegToRad(a) (a*M_PI/180.)
#define RadToDeg(a) (a*180./M_PI)

class TGoldSection{
public:
  double Min(double a, double b, Func func, double Error=0.001);
};

class SearchAngles{
private:
    T3DPointArray P;
    double FTheta, FPhi, FD;
    double FError, FMaxIter, FNumIter;
    double EvalL(double Theta, double Phi, double D);
    double Func1(double Theta){return EvalL(Theta, FPhi, FD);};
    double Func2(double Phi){return EvalL(FTheta, Phi, FD);};
    double Func3(double D){return EvalL(FTheta, FPhi, D);};
    double EvalD(double Theta, double Phi);
public:
    SearchAngles(const T3DPointArray Points, double Error=0.001, double MaxIter=1000);
    bool Down(double &Theta, double &Phi);
    int GetNumIter(void) const {return FNumIter;};
};
#endif

Автор: GoldFinch 27.7.2009, 21:58
Код

typedef double (__closure SearchAngles::*TFunc)(double x);

Автор: Saygak 28.7.2009, 08:49
GoldFinch, спасибо. Только теперь вопрос: это тип только функций членов класса SearchAngles? От других не подойдут?

Автор: mes 28.7.2009, 09:44
Saygak, чтоб получить обобщенные (не для конкретного класса) closure, как в Борланде, нужно использовать стороннюю библиотеку,
   тут описывается как раз этот вопрос : http://www.gamedev.ru/code/faq/?id=3587
ну или реализовывать самому.
smile


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)