首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将lambda作为模板函数参数传递

将lambda作为模板函数参数传递
EN

Stack Overflow用户
提问于 2017-01-29 20:28:35
回答 4查看 3.8K关注 0票数 17

为什么下面的代码不能编译(在C++11模式下)?

#include <vector>

template<typename From, typename To>
void qux(const std::vector<From>&, To (&)(const From&)) { }

struct T { };

void foo(const std::vector<T>& ts) {
    qux(ts, [](const T&) { return 42; });
}

错误消息为:

prog.cc:9:5: error: no matching function for call to 'qux'
    qux(ts, [](const T&) { return 42; });
    ^~~
prog.cc:4:6: note: candidate template ignored: could not match 'To (const From &)' against '(lambda at prog.cc:9:13)'
void qux(const std::vector<From>&, To (&)(const From&)) { }
     ^

但它不能解释为什么它不能匹配参数。

如果我让qux成为一个非模板函数,用T替换From,用int替换To,它就会编译。

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

https://stackoverflow.com/questions/41920890

复制
相关文章

相似问题

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