[英]Boost-range not working with C++1y init-capture mutable lambda
[英]How to emulate structured binding init-capture in lambda C++?
在 lambda 中的 init-capture 列表中是否有與結構化綁定等效的東西?
我知道這是無效的,但是有什么方法可以在不聲明 lambda 的情況下聲明 'i' 和 's' 嗎?
std::pair<int, std::string> p { 1, "two" };
auto f = [[i, s] = p] mutable -> std::pair<int, std::string> {
++i;
s += '_';
return {i, s};
};
auto print = [&]{
const auto& x = f();
std::cout << x.first << ": " << x.second << '\n';
};
print();
print();
print();
輸出:
1: _
2: __
3: ___
沒有直接做到這一點的語法。
您可以復制該對並在 lambda 中使用結構化綁定:
auto f = [p]() mutable {
auto& [i, s] = p;
++i;
s += '_';
return std::make_pair(i, s);
};
(請注意,從 C++20 開始,不允許在mutable
前面省略()
。)
另外,您也可以使用.first
和.second
直接:
auto f = [i = p.first, s = p.second]() mutable {
++i;
s += '_';
return std::make_pair(i, s);
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.