私は最近、この好奇心を抱いた考えをCコードを処理する間に見つけました。
私は、この関数が正しく実関数の特定のプロパティを識別し、すなわち引数とは異なる関数へのポインタを返す関数を書くことはできますか?
double template_1(double (*)(double),...);
doubleを返し、機能とパラメータの特定の数に引数としてポインタを中に取る関数を、書かれている
double f(double);
template_1
の中のポインタで表され、私がプラグインする可能性があるすべての実際の関数に対してtemplate_1
を有効にします。
double derivative(double (*)(double),double);
double derivative(double (*f)(double),double x){
double epsilon = ...;
return (f(x+epsilon)-f(x-epsilon))/(2.0*epsilon);
}
再び、それはすべてのFのために動作させるために、引数でFで:
は、今私はそれが聞かせて、別の関数を記述しなければなりませんでした。 私の質問は:derivative
をtemplate_1
に変更せずに使用したいので、double (*)(double)
という形式のものを派生して吐き出す関数を書くことは可能ですか?
私の考えはtypedef double (*real_function)(double);
を定義し、その後、私はそれが何か吐き出すしたいと思います
real_function g(double (*derivative)(double (*)(double),double))
を定義することでした:double derivative_2(double x)
を。私はg(derivative) = double (*h)(double);
のようなものを直接template_1 argument
に定義することができました。残念ながら、私はこの仕事をどうやって作るか、あるいはそれがうまくいくかどうかについては、あまり気にしていません。
この返された関数がすでに定義されている場合にのみ可能です。いいえ、実行時に関数を定義することはできません。これを行うには、HaskellやLispなどの関数型言語に切り替える必要があります。 –
実行時にC言語で関数を作成する方法はありません( –
@EugeneSh)。ほとんどの言語は、機能的なものだけでなく、これを(少なくとも何らかの形で)サポートしています - 例えば、C++、java、goなどです。 –