我正在阅读一些铬项目源代码,我发现了一件我无法理解的事情,有一个模板,它采用一个参数和部分特化,如下所示:
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)”,这通常意味着什么?它是某种没有名称的功能签名吗?我完全糊涂了。
有人可以尝试解释它的工作原理吗?
提前致谢
答案 0 :(得分:3)
这是一种功能类型。 float(int,string)
描述了一个带有两个参数的函数,一个类型为int
,另一个类型为string
,并返回float
。
您可以为此函数类型编写一个typedef,如下所示:
typedef float function_type(int, string);
您可以在C中执行此操作,但在C中,您只能使用函数类型执行以下操作:创建指向它的指针:
void f(function_type*);
在C ++中,这种类型也可以用作模板的参数。
答案 1 :(得分:2)
这意味着它是一个可调用的类型,需要传递此模板,即仿函数或函数指针或特定情况下的std::function<float(int,string)>
。
答案 2 :(得分:1)
这是函数的类型。您可能已熟悉函数指针/引用:int(*)(float, int)
或int(&)(double)
。移除*
或&
,您的类型为:int(float, int)
或int(double)
,等等
你也可以输入一个函数类型:
typedef int FuncType(short);
FuncType* funcPtr; // pointer to function that takes a short and returns an int