太复杂了。。。。精力都耗费在语言上了。。
【 在 milksea 的大作中提到: 】
:
: 用到回调函数,为了支持虚函数,不用模板类型参数表示回调函数,而用了 std::function 包装。结果用 lambda 表达式传参的时候,有 move 捕获变量就编译失败了。代码类似这样:
:
: void api(std::function<void()>&& callback)
: {
: callback();
: }
:
: void caller()
: {
: auto ptr = std::make_unique<Foo>();
: api(\ mutable{
: p->bar();
: });
: }
:
: 按惯例,错误信息还是一下子难以看懂。最后查来查去搞明白 std::function 要求保存的可调用对象是 copy constructable 的,而加了移动的捕获变量的 lambda 就不满足了。这问题还不好绕过去,这里最后改成 shared_ptr 了。
:
: 感觉 C++ 规则多还是一言难尽。惭愧我一开始写这段代码连mutable都不知道加。
: --
:
发自「今日水木 on Mi Note 3」
--
FROM 106.38.130.*