2

我正在阅读一些 chromium 项目源代码,我发现一件事我无法理解,有一个模板采用一个参数和部分专业化,如下所示:

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

它是一种函数类型。float(int,string)描述一个函数,它接受两个参数,一个是 type int,一个是 type string,并返回 a float

您可以像这样为此函数类型编写 typedef:

typedef float function_type(int, string);

你可以在 C 中做到这一点,但在 C 中,你只能对函数类型做一件事:创建一个指向它的指针:

void f(function_type*);

在 C++ 中,这种类型也可以用作模板的参数。

于 2012-09-18T14:22:01.370 回答
2

这意味着它是需要传递此模板的可调用类型,即函子或函数指针或std::function<float(int,string)>在您的特定情况下。

于 2012-09-18T14:14:14.380 回答
1

它是函数的类型。您可能已经熟悉函数指针/引用:int(*)(float, int)int(&)(double). 删除*or &,你就剩下类型:int(float, int)orint(double)

你也可以 typedef 一个函数类型:

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