错误:为lambda返回类型推导出不一致的类型“std::optional<double>”和“std::nullopt_t”
auto operator | (auto f1, auto f2) {
return [f1, f2]() {
if(f1) {
return f2(f1.value());
}
return std::nullopt;
};
}
int main() {
std::optional<int> a{11},b{};
auto z = a | [](auto b) -> std::optional<double>{
return b / 3.0;
};
auto x = z();
}
如何在运算符中使 lambda 返回类型通用| 功能 ?
想法是实现运营商| 它采用 optional 和 lambda ,仅当 optional 不是 nullopt 时才处理 lambda 并返回 lambda 返回类型的 optional
回答
您可以使用?:
auto operator | (auto f1, auto f2) {
return [f1, f2]() {
return f1?f2(f1.value()):std::nullopt;
};
}
因为它的类型组合规则没有自动返回类型推导那么严格。
THE END
二维码