C++有助于理解部分专业化

C++ help understanding partial specialization

本文关键字:专业化 解部 有助于 C++      更新时间:2023-10-16

我正在阅读一些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) ",这通常是什么意思?是某种没有名称的功能签名吗?我完全糊涂了。

有人可以尝试解释它是如何工作的吗?

提前致谢

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

您可以为此函数类型编写一个 typedef,如下所示:

typedef float function_type(int, string);
你可以在 C 中

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

void f(function_type*);

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

这意味着它是

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

它是函数的类型。您可能已经熟悉函数指针/引用: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