3 Stimmen

Funktionszeiger und C++-Schablonen

Ich habe einen C++-Code und ich muss wirklich C-Funktion in ihm zu verwenden:

int procedure(... , S_fp fun , ...)

wobei fun - ein Zeiger auf eine Funktion ist, deren Signatur so sein muss:

int fun(double* , double* , double)

Die Funktion, deren Zeiger ich verwenden möchte, ist Mitglied einer Klassenvorlage:

template<int nPar> class PenaltyAlgorithm
{
public:
...
int Calculate(double* param, double* val, double prec)
{
   ...
}
...
}

Wie Sie sehen können, ist die Unterschrift in Ordnung. Aber wenn ich dies tue: procedure(... &PenaltyAlgorithm::Calculate, ...);

Ich erhalte eine Fehlermeldung:

error: cannot convert ‘int (PenaltyAlgorithm<30>::*)(double*, double*, double)’ to ‘int (*)(...)’ for argument ...

Bitte um Hilfe. Wenn Sie zusätzliche Informationen benötigen, schreiben Sie bitte.

Danke!!!

Nachdem ich die Antworten gelesen habe, habe ich verstanden, dass es wichtig ist, Informationen über die Klasse hinzuzufügen:

template<int nPar> class PenaltyAlgorithm
{
public:
int Calculate(double* param, double* val, double prec)
    {
    *val = comp_fun->Compute(param);
    }

double* RunAlgorithm()
    {
        ...
        procedure(... &PenaltyAlgorithm<nPar>::Calculate, ...);
        ... 
    }
...
private:
...
CompositeFunction<nPar>* comp_fun;
}

1). Ich kann nicht statische fun verwenden, weil diese fun brauchen, um Zugriff auf Mitglieder der Klasse zu erhalten;

2). Können wir die Tatsache nutzen, dass wir die "Prozedur" über das fun-Mitglied der Klasse aufrufen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X