std :: function,模板参数T(X)

时间:2013-11-22 13:15:15

标签: c++11 std-function

我想知道是否有人可以解释如何在给定类型TX的情况下,std::functionT(X)作为模板参数。

int(double)看起来像是从doubleint的常规演员,那么std::function如何将其解析为不同的类型? 我做了搜索,但没有发现任何专门解决这个问题的内容。谢谢!

1 个答案:

答案 0 :(得分:2)

它可以使用部分模板专业化。看看这个:

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且取零或多个args的函数类型),否则不会有类的定义。

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

专业化现在可以在RArgs上运作,以实现其魔力。

请注意int(double)是一种函数类型。由于无法创建原始函数对象,因此通常不会在模板世界之外看到此语法。如果Tint(double),则T*是一个函数指针,就像int(*)(double)一样。