我想知道是否有人可以解释一下,给定类型 T
和 X
,std::function
如何采用 T (X)
作为模板参数。
int(double)
看起来像通常从 double
到 int
的转换,那么 std::function
又如何呢? code> 将其解析为不同的类型?
我进行了搜索,但没有找到任何专门解决这个问题的内容。谢谢!
最佳答案
它可以使用部分模板特化。看看这个:
template <typename T>
class Func;
template <typename R, typename... Args>
class Func<R(Args...)>
{
public:
Func(R(*fptr)(Args...)) {/*do something with fptr*/}
};
此类采用单个模板参数。但除非它匹配 R(Args...)
(即返回 R 并接受零个或多个参数的函数类型),否则不会有该类的定义。
int main() { Func<int> f; }
// error: aggregate 'Func<int> f' has incomplete type and cannot be defined
.
int func(double a) { return a+2; }
int main() { Func<int(double)> f = func; }
// ok
该特化现在可以在 R
和 Args
上运行来发挥其魔力。
请注意,int(double)
是一种函数类型。由于您无法创建原始函数对象,因此您通常不会在模板世界之外看到此语法。如果 T
是 int(double)
,则 T*
是一个函数指针,就像 int(*)(double)
一样>.
关于c++11 - std::function,模板参数 T(X),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20145837/