2

私はいくつかのクロムプロジェクトのソースコードを読んでいますが、理解できないことが1つ見つかりました.1つのパラメーターと以下のような部分的な特殊化を受け取るテンプレートがあります:

template <class Sig>
class Callback;

template <typename R, typename A1,typename A2>
class Callback<R(A1,A2)>
{

};

次に、次の例のようにオブジェクトを作成できます。

Callback < float ( int , string ) > myCallback;
Callback < int ( float , int ) > myCallback2;
etc.

この表現 " float (int , string) " を理解しようとしていますが、それは一般的にどういう意味ですか? 名前のないある種の関数シグネチャですか?? 私は完全に混乱しています。

誰かがそれがどのように機能するかを説明できますか?

前もって感謝します

4

3 に答える 3

3

関数型です。typeとfloat(int,string)type の 2 つの引数を取り、a を返す関数を記述します。intstringfloat

この関数型の typedef は次のように記述できます。

typedef float function_type(int, string);

C ではそれを行うことができますが、C では、関数型でできることは 1 つだけです。関数型へのポインターを作成することです。

void f(function_type*);

C++ では、このような型をテンプレートの引数として使用することもできます。

于 2012-09-18T14:22:01.370 に答える
2

std::function<float(int,string)>これは、このテンプレートを渡す必要があるのは呼び出し可能な型であることを意味します。つまり、特定のケースでは、ファンクターまたは関数ポインターまたは aです。

于 2012-09-18T14:14:14.380 に答える
1

関数のです。関数ポインタ/参照については、すでによく知っているかもしれません:int(*)(float, int)またはint(&)(double). *orを削除する&と、次のタイプが残ります: int(float, int)orint(double)など

関数型も型定義できます。

typedef int FuncType(short);
FuncType* funcPtr; // pointer to function that takes a short and returns an int
于 2012-09-18T14:17:22.913 に答える