lambda
这些代码有几个问题
1. 多层、超长的lambda
这种应该单写函数了,要不可读性太差。
2. 不需要使用auto的地方全部用auto
auto是用来帮忙阅读或者实现功能的。
滥用auto是新手的一大问题。
【 在 amony (断网) 的大作中提到: 】
: 标 题: 偷个懒,请教一下这种写法是什么意思
: 发信站: 水木社区 (Thu Apr 23 12:52:06 2020), 站内
:
: 在github上找了个轮子cpp-ipc,发现读不懂了,c++就是够够的。
: 主要是这种调用方法:
: static bool send(ipc::handle_t h, void const * data, std::size_t size) {
: return send([](auto info, auto que, auto msg_id) {
:
: 上下文:
: static bool send(ipc::handle_t h, void const * data, std::size_t size) {
: return send([](auto info, auto que, auto msg_id) {
: return [info, que, msg_id](std::int32_t remain, void const * data, std::size_t size) {
: if (!wait_for(info->wt_waiter_, [&] {
: return !que->push(info->cc_id_, msg_id, remain, data, size);
: }, default_timeout)) {
: ipc::log("force_push: msg_id = %zd, remain = %d, size = %zd\n", msg_id, remain, size);
: if (!que->force_push([](void* p) {
: auto tmp_msg = static_cast<typename queue_t::value_t*>(p);
: if (tmp_msg->storage_) {
: clear_storage(*reinterpret_cast<std::size_t*>(&tmp_msg->data_),
: static_cast<std::int32_t>(data_length) + tmp_msg->remain_);
: }
: return true;
: }, info->cc_id_, msg_id, remain, data, size)) {
: return false;
: }
: }
: info->rd_waiter_.broadcast();
: return true;
: };
: }, h, data, size);
: }
: --
:
: ※ 来源:·水木社区
http://www.newsmth.net·[FROM: 219.237.112.*]
--
FROM 76.126.252.*