前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ 动态新闻推送 第51期

C++ 动态新闻推送 第51期

作者头像
王很水
发布2022-02-28 16:26:58
1910
发布2022-02-28 16:26:58
举报
文章被收录于专栏:C++ 动态新闻推送

文章

替换了算法,使用black而不是sha1

这个人写了很多文章。对浏览器感兴趣的/业界人士可以关注一波。我不太懂就不多说了

这玩意, 确实挺方便

代码语言:javascript
复制
auto request = http_request{
  .method = http_method::get,
  .uri = "localhost:7634",
  .headers = { { .name = "Authorization", .value = "Bearer TOKEN" } },
};

解析ponder这个库。对于想学习反射的值得一看

尽可能把错误处理掉或者用optional /expect / outcame包装处理掉

代码语言:javascript
复制
string* UserIP(); //1
string UserIP(string* errmsg); //2
bool GetUserIP(string* ip); //3
bool GetUserIP(string* ip, string* errmsg); //4
Result<string> UserIP(); //5
ResultString UserIP(); //6
string UserIP(); //7

大家觉得哪个接口好?

1肯定不行,2 3 4都需要传进个string处理,比较脏, 5是不是太复杂了,6是简单版本,但是会不会又有ResultDouble之类的东西?7简单,只有ip,errmsg不放进去,也许这个才是最优解?

开放题,没有答案

图形学的东西,不太懂,这里标记TODO

代码语言:javascript
复制
DoImportantStuff(true, false, true, false);

我们都知道这种参数会有莫名其妙的问题,丢失值的信息,一个两个倒还好,多了难免眼花,怎么重构,封装成enum

代码语言:javascript
复制
enum class UseCacheFlag    { False, True };
enum class DeferredFlag    { False, True };
enum class OptimizeFlag    { False, True };
enum class FinalRenderFlag { False, True };

// and call like:
RenderGlyphs(glyphs,
             UseCacheFlag::True, 
             DeferredFlag::False, 
             OptimizeFlag::True, 
             FinalRenderFlag::False);

使用bit flag

代码语言:javascript
复制
#include <type_traits>

struct Glyphs { };

enum class RenderGlyphsFlags
{
    useCache = 1,
    deferred = 2, 
    optimize = 4,
    finalRender = 8,
};

// simplification...
RenderGlyphsFlags operator | (RenderGlyphsFlags a, RenderGlyphsFlags b) {
    using T = std::underlying_type_t <RenderGlyphsFlags>;
    return static_cast<RenderGlyphsFlags>(static_cast<T>(a) | static_cast<T>(b));
    // todo: missing check if the new value is in range...
}

constexpr bool IsSet(RenderGlyphsFlags val, RenderGlyphsFlags check) {
    using T = std::underlying_type_t <RenderGlyphsFlags>;
    return static_cast<T>(val) & static_cast<T>(check);
    // todo: missing additional checks...
}

void RenderGlyphs(Glyphs &glyphs, RenderGlyphsFlags flags)
{
    if (IsSet(flags, RenderGlyphsFlags::useCache)) { }
    else { }

    if (IsSet(flags, RenderGlyphsFlags::deferred)) { }
    else { }

    // ...
}

int main() {
    Glyphs glyphs;
    RenderGlyphs(glyphs, RenderGlyphsFlags::useCache | RenderGlyphsFlags::optimize);                                      
}

结构体

代码语言:javascript
复制
struct RenderGlyphsParam
{
    bool useCache;
    bool deferred;
    bool optimize;
    bool finalRender;
};
void RenderGlyphs(Glyphs &glyphs, const RenderGlyphsParam &renderParam);

// the call:
RenderGlyphs(glyphs,
             {/*useCache*/true, 
             /*deferred*/false, 
             /*optimize*/true, 
             /*finalRender*/false});

c++20我们有了字段构造,字段信息终于有了

代码语言:javascript
复制
struct RenderGlyphsParam
{
    bool useCache;
    bool deferred;
    bool optimize;
    bool finalRender;
};
void RenderGlyphs(Glyphs &glyphs, const RenderGlyphsParam &renderParam);

// the call:
RenderGlyphs(glyphs,
             {.useCache = true, 
              .deferred = false, 
              .optimize = true, 
              .finalRender = false}); 

这个更完美一些

介绍c++一些Supervise管理策略以及actor框架使用,比较少用。基本上都是糊一个taskflow模型,不用什么let it crash。这种东西放在背后的管理系统来做。不在业务进程里做

视频

constexpr修饰函数,没问题

constexpr修饰值,这个值未必是编译期计算(用const可以),取决于编译器,且 constexpr修饰的值肯定在堆栈,所以要注意作用域问题

介绍周边生态

讲fuzzer的工作原理

介绍他写的一个反射库

没啥意思。讲window profile的

这讲的是个啥啊?论文在Parallel Computing Technologies这本书里,谁能搞个电子版,原版太贵了。愣是没听明白。这里标记TODO,有机会再看吧

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章
  • 视频
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档