可变参数 - C++11中的语法特性(10)

允许模版定义0到多个参数,这样函数的参数可以灵活设置。

定义语法如下:

template<class/typename... Args>

返回值 函数名称(Args ... args)

函数名称(args...)

常见应用在打印多个参数上,或者递归计算里,示例如下:

void print() {

   //空的时候打印

    cout << "no item" << endl;

}

template <class T, class ... Args>

void print(T head,  Args ... args) {

  cout << head << endl;

 print(args...);

}

void main(){

print(1,2,3); //依次打印,实际的函数原型为print(int,int,int);

}

以ceph中的代码为例,在创建消息时大量使用了可变参数模版

template<class T, typename... Args> 

friend boost::intrusive_ptr<T> ceph::make_message(Args&&... args);

不同的消息会传递不同的参数,比如(mds/Server.cc)某些消息接受者需要回复消息给发送者,消息包括被处理的消息和处理返回值等2个参数。

server->reply_client_request(mdr, make_message<MClientReply>(*mdr->client_request, r));

再比如osd的回复消息(osd/replicated_backend.cc)包含了多达9个参数。

auto m = make_message<MOSDRepOp>(req_id, whoami, spg_t{pgid, pg_shard.shard}, hoid, CEPH_OSD_FLAG_ACK | CEPH_OSD_FLAG_ONDISK, map_epoch, min_epoch, tid, ver);

ceph中组建之间消息众多,根据不同情况传递不同个数的参数,使用这种方式可以极大提升编码的灵活性。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容