C++にはまったく新しいものです。C++パラメータとしての関数へのポインタを持つ外部関数。メンバ関数を持つクラスの内部で使用されます。
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; }
};
そして、それは外部のグローバル関数の使用、他の場所で定義されます::
double extF(double x, double y, std::function<double(double)> f)
{
if (x*y < 0)
return f(x);
else
return f(y);
}
式が偽のですが、私はクラスがあるとします。これはコンパイルされません。私は簡単なintF
、A::*intF
、&A::intF
、さらにいくつかの非正統的な組み合わせを試みましたが、それはちょうど推測です。問題は、クラスA
がグローバルな外部関数を使用する唯一のものではなく、実行時にユーザーが選択できるはずのものです。検索では、インスタンス化(?)が必要なため、このようなメンバ関数へのポインタを作ることはできないと答えた回答がありましたが、解決策は見つかりませんでした。これはできますか?はいの場合、どうですか?
編集:追加の質問:メンバ関数がconst double f(...) const
であればどのメンバ関数へのポインタを行うことができますか?
クラスのメンバーにアクセスしない場合は、 'intF'静的メンバー関数を作成してください。 – songyuanyao
@songyuanyao残念ながら、そうです。これが問題であることが分かっていれば、コードを修正して表示するでしょう。 –
@aconcernedcitizenあなたのせいではなく、私のこと。私はOTに最初に行きました、これらのコメントを削除することができます。 –