拒绝 lambda 表达式 (C++11)
lambda expression being rejected (C++11)
virtual Answer<const Taaal& const> askWho(bool(const Taaal& const)) = 0;
virtual Answer<const Taaal& const> askWho(const Taaal& const t) {
return askWho([&](auto q) {
return q == t;
});
}
被拒绝为"没有与参数列表匹配的重载函数实例"(此外,我被告知不允许使用 auto,但用显式类型替换它留下了第一个问题(
Taaal 是声明这些方法的(抽象(类。答案来自另一个标头 #included,其定义无关紧要。
只有无捕获的 lambda 定义了到函数指针的隐式转换。您的 lambda 表达式捕获其上下文是因为捕获默认&
。由于您的 lambda 不能是无状态的,因此您可以更改其他重载的参数类型
virtual Answer<const Taaal&> askWho(std::function<bool(const Taaal&)>) = 0;
如果您的 lambda 不需要捕获上下文变量,则可以从捕获列表中删除&
,并且转换将按预期工作
virtual Answer<const Taaal&> askWho(const Taaal& t) {
return askWho([](auto q) {
// ^^ - nothing here
return ...;
});
}
请注意,lambda 的 auto q
参数类型仅在您在 C++14 模式下编译代码时才有效(在 gcc 和 clang 上-std=c++1y
(。在 C++11 模式下,您将指定参数类型。
lambda 中的自动仅在 C++14 中允许。
您必须使用实际参数类型,多态 lambda 不包含在 C++11 中。
相关文章:
- 如何在 c++11 中使用正则表达式找到确切的子字符串?
- 使用C++11标准的哪些规则来确定({..})中表达式的类型
- 如何将Javascript正则表达式转换为C++11正则表达式
- C++11 (MSVS2012) 正则表达式在多行 std::string 中查找文件名
- 如何构建包含C 11的恒定表达式的代码
- C 11正则表达式和字符串U8前缀
- C++11 正则表达式匹配不以句点结尾的完整单词
- 有条件地忽略 c++11 正则表达式中的大小写
- C 11-是参考的初始化,而不是表达式
- 如何在C 11中使用variadic模板来生成左相关表达式(又称左折)
- C++11 中的默认正则表达式引擎是什么?
- 为什么 pcre 正则表达式比 c++11 正则表达式快得多
- 在 C++11 下使用正则表达式
- C++11 正则表达式行尾不匹配
- C 11:比较lambda表达式
- C++11正则表达式:在替换字符串中捕获组后的数字
- 为什么 C++11 正则表达式(libc ++ 实现)如此缓慢?
- C++11 CMake:正则表达式失败
- 经验确定c++ 11表达式的值类别
- c++ 11表达式中变量的类型