Ziemlich neu in C++. Angenommen, ich habe eine Klasse:C++ Externe Funktion mit Zeiger, um als Parameter zu fungieren, innerhalb einer Klasse mit einer Elementfunktion
class A
{
private:
double m_x, m_y;
public:
A(double x, double y): m_x {x}
{
m_y = extF(m_x, y, *intF);
}
double intF(double x) { return 2*x; }
};
Und es macht die Verwendung einer externen globalen Funktion, an anderer Stelle definiert:
double extF(double x, double y, std::function<double(double)> f)
{
if (x*y < 0)
return f(x);
else
return f(y);
}
Formeln gefälschte sind. Dies kompiliert nicht. Ich versuchte einfach intF
, A::*intF
, &A::intF
, sogar einige unorthodoxe Kombinationen, aber das ist nur raten. Das Problem ist, dass die Klasse A
nicht die einzige ist, die die globale externe Funktion verwendet, und sie sollte zur Laufzeit für den Benutzer auswählbar sein. Suchanfragen ergaben einige Antworten, die besagen, dass es nicht möglich ist, einen Zeiger auf eine Elementfunktion wie diese zu setzen, da sie Instanziierung (?) Benötigt, aber ich habe keine Lösungen gefunden. Kann das gemacht werden? Wenn ja, wie?
Edit: Weitere Frage: Wie kann der Zeiger auf Member-Funktion, wenn die Funktion const double f(...) const
ist Mitglied getan werden?
Machen Sie die statische Memberfunktion "intF", wenn sie nicht auf Member der Klasse zugreift. – songyuanyao
@songyuanyao Leider tut es das. Wenn ich wüsste, dass das ein Problem ist, hätte ich den Code so geändert, dass er angezeigt wird. –
@aconcernedcitizen Nicht deine Schuld, sondern meine. Ich ging zuerst OT, löschen wir diese Kommentare. –