C ++有助于理解部分特化

时间:2012-09-18 14:12:10

标签: c++ class templates partial-specialization

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

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)”,这通常意味着什么?它是某种没有名称的功能签名吗?我完全糊涂了。

有人可以尝试解释它的工作原理吗?

提前致谢

3 个答案:

答案 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