Tencent / flare

Flare是广泛投产于腾讯广告后台的现代化C++开发框架,包含了基础库、RPC、各种客户端等。主要特点为易用性强、长尾延迟低。
Other
1.33k stars 200 forks source link

Update `Boxed::GetRaw()` and `Boxed::Get()` #84

Closed 4kangjc closed 1 year ago

0x804d8000 commented 1 year ago

这个处理的是什么使用场景呢

4kangjc commented 1 year ago

这个处理的是什么使用场景呢

hmm,少了const版本的重载吧

4kangjc commented 1 year ago

这个处理的是什么使用场景呢

hmm,少了const版本的重载吧

我看std::optional都有4个版本的

4kangjc commented 1 year ago

这个处理的是什么使用场景呢

https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0847r7.html

0x804d8000 commented 1 year ago

std::optional的情况不太一样。

取决于用户怎么使用,std::optional可能出现在包括但不限于const optional&&的地方(尽管能够合理正确的使用这种用法的地方非常少见,一定程度上也可以说是罕见),这时候作为标准库,不应当给用户制造不必要的障碍,所以始终应该正确的透传cvr qualifiers。

但是Boxed<T>只可能作为参数传给用户的continuation,这时候不会(至少不应当)存在const Boxed<T>& / const Boxed<T>&&的场景。实际上我们期望的参数类型只有Boxed<T>这种by-value或者Boxed<T>&&这种by-rvalue-ref的使用方式,所以不处理const &(&)的重载版本。

as a side note,volatile这个qualifier其实std::optional也没处理,因为正确的使用volatile几乎和C++模板类没什么交集。这(optional不考虑不会用到的volatile场景)跟我们(Boxed<T>不考虑不会用到的const场景)的思路是一致的。

4kangjc commented 1 year ago

OK

4kangjc commented 1 year ago

OK

其实boxed和folly的try还是有很多相似点的,实际上用户可能会写成const T&,不过boxed主要还是给core,future等使用的,用户也不会直接使用

4kangjc commented 1 year ago

OK

其实boxed和folly的try还是有很多相似点的,实际上用户可能会写成const T&,不过boxed主要还是给core,future等使用的,用户也不会直接使用

噢,我看见注释了

// `Boxed` holds the result of an asynchronous execution, analogous to
// `Try` in Facebook's Folly.

emm, Folly 的 Try也有const版本