首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数,模板参数T(X)

函数,模板参数T(X)
EN

Stack Overflow用户
提问于 2013-11-22 13:15:14
回答 1查看 361关注 0票数 3

我想知道是否有人能解释一下,给定TX类型,std::function如何将T(X)作为模板参数。

int(double)看起来像通常从doubleint的转换,那么std::function如何将其解析为不同的类型呢?我确实搜索过,但没有找到任何具体解决这个问题的方法。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-22 13:23:39

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

代码语言:javascript
复制
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的函数类型),否则类就不会有定义。

代码语言:javascript
复制
int main() { Func<int> f; }
// error: aggregate 'Func<int> f' has incomplete type and cannot be defined

代码语言:javascript
复制
int func(double a) { return a+2; }
int main() { Func<int(double)> f = func; }
// ok

现在,专门化可以在RArgs上运行来实现它的魔力。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20145837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档