parameter pack和递归模板展开
需求
做一个libevent的wrapper,有个需求,用户对某个fd的可读事件感兴趣,要求在产生这个事件时,调用他传入的某个可调用对象及其参数。
libevent的回调类似:void LibeventCallback(int fd, short flag, void* arg);
要求: 1、用户传入的可调用对象fn,拿的参数是可变的,第一个参数为某个特定类型,用于感知fd和flag,后续其他为用户自定义参数
parameter pack和递归模板展开
做一个libevent的wrapper,有个需求,用户对某个fd的可读事件感兴趣,要求在产生这个事件时,调用他传入的某个可调用对象及其参数。
libevent的回调类似:void LibeventCallback(int fd, short flag, void* arg);
要求: 1、用户传入的可调用对象fn,拿的参数是可变的,第一个参数为某个特定类型,用于感知fd和flag,后续其他为用户自定义参数
recall of memory order model
这两个概念容易混淆,重新捋一下。
关于Cache Coherency:
c++ notes:recall of move-semantics and rvalue-reference (2)
回顾:
G1-G4:
G1
. If a variable or parameter is declared to have type T&& for some deduced type T, that variable or parameter is a universal reference.
G2
.
c++ notes:recall of move-semantics and rvalue-reference (1)
几年前,整理了一份rvalue相关笔记:以前的一份笔记,梳理近况时,发现某些问题还是没有弄清楚。
Universal Reference
Q: 什么场景下需要考虑这个问题? A:模板元编程时,需要考虑兼容各种传入参数类型时(尤其是『左值/右值』)。基本上我感觉就是为了处理完美转发问题。比如写一个工厂函数模板,需要同时兼容传入的参数是左值和右值的情况,核心点是一个右值无法用于初始化一个左值引用,c++11之前要解决这个问题,要么写很多重复偏特化模板,要么付出拷贝参数的代价。
c++11引入右值引用之后,上述问题可以通过universal reference
来解决,即传入参数是左值时,形参的类型推导为左值引用,是右值时,推导为右值引用,同时只需要提供一套模板即可。
Q: 什么是Universal Reference
?
A: 形如T&&
, T
不含有任何的cv限定符, 且T
需要被推导
G1
. If a variable or parameter is declared to have type T&& for some deduced type T, that variable or parameter is a universal reference.
cpp language questions that I've encountered.
enable_shared_from_this的实现和CRTP Idiom
c++服务端rpc笔记:读muduo有感
rpc框架
最近比较详细地缕了一遍公司内部另一个团队的存储产品(基于apache thrift),后简称为A。到目前为止,本团队存储产品自研的rpc框架,加上自己写过一个简单rpc框架用于rdb实例分裂,已经接触了3个rpc框架。准备在这篇文章总结下一些个人感想。
A的服务端:使用thrift-rpc的nonblock-server,连接处理模型是同步的: a. io线程在收到一个包后,会先把自己设为idle(具体点就是摘掉本线程上的可读写事件),扔给worker线程处理完成后再加回来。
A的cli端的处理是同步的:
c++服务端rpc笔记:读muduo有感
rpc框架
最近比较详细地缕了一遍公司内部另一个团队的存储产品(基于apache thrift),后简称为A。到目前为止,本团队存储产品自研的rpc框架,加上自己写过一个简单rpc框架用于rdb实例分裂,已经接触了3个rpc框架。准备在这篇文章总结下一些个人感想。
A的服务端:使用thrift-rpc的nonblock-server,连接处理模型是同步的: a. io线程在收到一个包后,会先把自己设为idle(具体点就是摘掉本线程上的可读写事件),扔给worker线程处理完成后再加回来。
A的cli端的处理是同步的:
智能指针1: shared_ptr使用梳理
智能指针
本文提及并讨论了:
shared_ptr
引入背景std::ref
c++笔记:STL容器迭代器失效场景
stl迭代器失效场景
(完整版见下面 Ref1 or cppref) note:
顺序型容器