C++有助于理解部分专业化
C++ help understanding partial specialization
我正在阅读一些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
相关文章:
- 如何使用默认参数等选择模板专业化
- 模板化建造师专业化
- 类模板的成员功能的定义在单独的TU中完全专业化
- TSP递归解的迭代形式
- 我应该在锁定TBitmap画布后解锁它吗
- 使用C++进行运行长度解压缩
- 为什么当我解模块化时,这个C++代代码"效率较低"?
- 如何将部分流作为参数传递
- 部分专业化和嵌套模板
- 模板专业化可以进入我的.cpp吗?
- C++ 如何将数组值解压缩为函数参数
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 别名模板的专业化 C++11 中没有开销的最佳替代方案
- 在 Qt(C++) 中使用 QProcess 解压缩 - 提取目录问题
- 部分专业化和对标准::void_t<>的需求
- 虚假唤醒是否会解锁所有等待线程,甚至是不相关的线程?
- 没有取消引用/解包对象的标准方法?
- 浏览压缩文件与游览解压缩它们
- "专业化不参与超载"
- 如何在部分类模板专业化中实现继承