iはC++での関数宣言を持って、それが働いているかを知る必要がありました:奇妙な機能
template<class x>
int fun(x, x(*)(x*));
最初の引数は、タイプxの目的です。そして、どのように2番目のものを記述するのですか?
iはC++での関数宣言を持って、それが働いているかを知る必要がありました:奇妙な機能
template<class x>
int fun(x, x(*)(x*));
最初の引数は、タイプxの目的です。そして、どのように2番目のものを記述するのですか?
これは、整数を返し、パラメータとしてx
と、x
を返し、x*
を返す関数へのポインタを引数とする宣言です。
x(*)(x*)
は、「x
を返し、パラメータとしてx*
を返す関数へのポインタ」を意味する部分です。最初のx
が戻り値の型であり、(*)
はそれが関数へのポインタであることを示します(パラメータに名前がある場合はx(*argname)(x*)
と書かれます)。そして3番目のx*
は単なる引数です。
それは次のようになり呼び出す:
int f(int* iptr) { return something; }
fun(4, f); // no need for the explicit template parameter because it can be deduced
以上の一般
template<typename x>
x functionname(x* xptr) { return something; }
ダニエル・ホワイトはコメントで言ったように、Cはテンプレートを持っていない、ので、それはCで動作しません。 。
xがクラスである第2のパラメータタイプ:
x(*)(x*)
手段「機能x
を返すとx*
を取るへのポインタ(*)
は、例えば:
class MyClass {};
MyClass doit(MyClass* arg) { return *arg; }
MyClass instance;
int result = fun(instance, doit);
これを満たす宣言の点では、 'x foo(x * bar)' –
これはポインタであります型xのオブジェクトを返す関数に渡し、型xへのポインタの1つのパラメータを得ました。
テンプレートとしてCでは動作せず、クラスはC++コンストラクト。 –