我想知道是否有人能解释一下,给定T和X类型,std::function如何将T(X)作为模板参数。
int(double)看起来像通常从double到int的转换,那么std::function如何将其解析为不同的类型呢?我确实搜索过,但没有找到任何具体解决这个问题的方法。谢谢!
发布于 2013-11-22 13:23:39
它可以使用部分模板专门化。看看这个:
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现在,专门化可以在R和Args上运行来实现它的魔力。
注意,int(double)是一个函数类型。由于不能创建原始函数对象,所以通常不会在模板世界之外看到这种语法。如果T是int(double),那么T*就是像int(*)(double)一样的函数指针。
https://stackoverflow.com/questions/20145837
复制相似问题