美文网首页
可变参数 - C++11中的语法特性(10)

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

作者: 要厉害的 | 来源:发表于2019-09-28 16:05 被阅读0次

    允许模版定义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中组建之间消息众多,根据不同情况传递不同个数的参数,使用这种方式可以极大提升编码的灵活性。

    相关文章

      网友评论

          本文标题:可变参数 - C++11中的语法特性(10)

          本文链接:https://www.haomeiwen.com/subject/fxiwuctx.html