Chromium base库介绍

因为工作原因需要引入base库,我作为新人则挑起了这个活,拿出工作中的一些时间来学习base库,主要关注其实现原理,使用方法,注意事项,特点,优缺点。

本文持续更新
2016/10/8 第一次更新

  • AtExitManager 类似于linux下的atexit,注册退出清理函数,不过base库的实现机制是利用了C++的RAII

void exit_first(void *data) { LOG(INFO) << "first"; }

void exit_last(void *data) { LOG(INFO) << "second"; }

void exit_task(void *data) { LOG(INFO) << "use bind"; }

class task {
 public:
  void func() { LOG(INFO) << "task::func"; }
};

int main() {
  base::AtExitManager manager; //这个对象在析构的时候,会去回调注册的callback
  task tsk;
  base::AtExitManager::RegisterCallback(&exit_first, nullptr);   //注册callback
  base::AtExitManager::RegisterCallback(&exit_last, nullptr);
  base::AtExitManager::RegisterTask(base::Bind(&exit_task, nullptr)); //指出注册base::Bind绑定的callback
  base::AtExitManager::RegisterTask(
      base::Bind(&task::func, base::Unretained(&tsk)));

  // This method can take the initiative to register callback functions
  base::AtExitManager::ProcessCallbacksNow(); //可以自己主动的调用

  return 0;
}
  • atomicops 对C++11的std::atomic的封装,默认情况下C++11的std::atomicSC(sequence consistent)顺序一致性模型的,也就是内部做了Barrier(有性能损耗),但是大多数场景下我们只是想使用atomic特性,因此base针对不同的内存模型进行了封装,有NoBarrierBarrieraccquirerelease等等。

  • AutoReset 给全局变量提供默认值和新值,等AutoReset析构了,就会恢复默认值

  • base64base64url 提供了对url场景和一般场景下的base64编码,具体可以参考RFC-4648

  • BigEndian 一个大端序的bytesbuf。

  • GetBuildTime 通过在build的时候,生成一个带有编译时间的常量的头文件,可以通过这个头文件得到二进制程序的编译时间。

  • Bind/CallBackstd::bind&std::function类似,Google提供了使用文档和设计文档,说明了自己为何没有使用std标准库,而是自己造轮子的原因callback

  • bits 提供了对字节对齐大小的计算,还有计算一个数是2的几次方相关的函数。

  • bind_helpers 类似于std::ref,默认的std::bind是将参数拷贝后再绑定,可以使用std::ref通过传引用的方式绑定,bind_helper提供了更丰富的传参方式,传引用,传值,所有权转移等。

  • BarrierClosure 类似于java的CountDownLatch,需要传一个次数和callback函数,每调用一次次数就减1,直到最后一次才会真正的调用callback函数。

  • Reversed 可以O(1)复杂度翻转容器中的元素,本质上并不是真正的翻转,只是改变了begin()和end()的含义,该函数返回一个迭代器类型,只不过其begin()返回的是容器的rbegin()end()返回的是容器的rend()

  • hash_table/

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值