本周(05/06 ~ 05/12)是5月份的第二周。

Life

#1

这周跑了三次富阳,分别是:周二下午接媳妇儿回家;周四晚上又送媳妇儿去富阳,然后因为媳妇儿周五只上半天班,所以周五中午又把媳妇儿接回来了。

但是周六早上实在起不来了,所以周六上午媳妇儿自己打车去了。

这周天气比较高,富阳那边明显感觉到非常热,所以这次可以完全确定车的空调制冷有问题了…

约了下周一的离家比较近的一家极氪家检查,到时候先看看是啥问题

这提车一个月就出了这种问题,我真的是有点无语了…

#2

本周观影

  • 哥斯拉-1.0 2/5 实在太一般了…男女主的日式演技太尬了…难怪安藤樱这篇还能拿个最佳女配…另外这反战思考只能算作文艺型擦边,哥斯拉都不舍得上特效,有些镜头道具感太重了
  • 海洋深处 In the Heart of the Sea 3.5/5 看完才发现是朗霍华德导演的…后半段起伏比预想得差点,但是整体还是稳当的,就是这 cast 确实有点厉害
  • 可怜的东西 Poor Things 3/5 不知道怎么评价这电影,但是石头姐的表演确实到位,从什么都不懂到找到了自我的转折表现得很好;画面构图也是有独特的风格。整体怎么说呢,总给我一种很邪门的感觉

#3

这周六五一调休上班,没有休假,一周只有周日单休,感觉还是挺累的…

感觉我现在这个年纪已经不太能扛住单休或者996的工作强度了

Work

#1

本周学习

CppCon 2021 | Generic Graph Libraries in C++20 - Andrew Lumsdaine & Phil Ratzloff

CppCon 2021 | C++20 ❤ SQL - John Bandela

  • 作者在 cppcon 2021 上还做过一个 meta-struct 的 TMP library 的分享,这个 talk 是基于 meta-struct 做的一些 compile-time SQL ORM/utils
  • 用了很多 tmp tricks 感觉可以学习一下
  • 不过我依然觉得某些操作其实可以考虑 boost.pfr?

CppCon 2021 | Back to Basics: Casting - Brian Ruth

  • 比较细致的讲了 C++ 的四大 cast 及其使用场景,还提了一嘴相似的 move/forward/bit_cast
  • 干货比较多

CppCon 2021 | Deducing this Patterns - Ben Deane

  • 详细介绍了 deducing this 这个特性,演讲者是 proposal 的三个合作者之一

  • deducing this 的本质是引入了 explicit this parameter,并且这个参数可以指定类型,在这个基础之上配合类型推导(可以是模板参数,也可以利用函数参数的 auto),即可推导出 this 对应的类型,这样就省掉了 const/non-const,lvalue/rvalue 的逐一实现

  • 利用 deducing this 的副作用,有些场合可以不再需要 CRTP

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    struct base {
    void print_me(const char* src) const {
    std::cout << "base::print_me from " << src << "\n";
    }

    auto func1(this const base& self) {
    self.print_me("func1");
    }

    auto func2(this auto&& self) {
    self.print_me("func2");
    }
    };

    struct derived : base {
    void print_me(const char* src) const {
    std::cout << "derived::print_me from " << src << "\n";
    }
    };

    derived d{};
    d.func2(); // derived::print_me from func2
  • 同时终于可以实现 recursive lambda 了…

    1
    2
    3
    4
    5
    6
    auto fib = [](this auto self, int n) {
    if (n < 2)
    return n;
    return self(n - 1) + self(n - 2);
    };
    std::cout << fib(6);
  • 另外,现在标准里,this 的类型是可以 pass-by-value 的

C++ Weekly - Ep 264 - Covariant Return Types and Covariant Smart Pointers

  • 引入一个 Covariant_Pointer 结构来实现返回类型是智能指针包裹的 hierarchical type 时候的 covariance

  • Covariant_Pointer 的设计有点巧妙

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    template<typename Contained, typename Base = void>
    struct covariant_pointer : covariant_pointer<Base, void> {
    std::unique_ptr<Contained> ptr;
    };

    template<typename Contained>
    struct covariant_pointer<Contained, void> {};

    struct base {
    virtual covariant_pointer<base>& get() = 0;
    };

    struct derived : base {
    covariant_pointer<derived, base>& get() override {
    return ptr;
    }

    covariant_pointer<derived, base> ptr;
    };

constexpr Dynamic Memory Allocation, C++20 https://www.cppstories.com/2021/constexpr-new-cpp20/

  • C++ 20 引入了一个 transient allocation 的概念,使得一个 constexpr context 里只要 allocation/release 是配对的,就可以合法的使用
  • 这个特性使得 constexpr std::string std::vector 这种容器变得可能
  • 另外如果需要把 constexpr context 中的结果返回,可以借助 std::array 来传递结果;因为 transient allocation 不能离开自身的上下文,而 std::array 没有这个束缚

#2

这周终于把 absl/Status 的代码看完了,笔记在:https://kingsamchen.github.io/2024/05/12/src-study-abseil-status-status/

后续有时间的话再看看 absl/StatusOr

#3

之前有提过想要 disable vagrant 默认的 2222 ssh 端口转发,最近发现不需要禁用,只要直接把自己需要的 ssh 端口转发规则的 id 标为 ssh 即可,即

1
config.vm.network "forwarded_port", guest: 22, host: 14922, id: "ssh"

就可以了


好了这周就这样,下周见