加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 带有可变参数的函数

发布时间:2020-12-16 10:28:05 所属栏目:百科 来源:网络整理
导读:如果我想使用该功能,我可能有哪些缺点 foo(int num,...) 实现可变数量的参数? 我知道你只能使用一种数据类型的第一个缺点. 还有其他办法吗? 解决方法 有多种方法不使用省略号表示法. 为什么?由于类型安全,原始的危险操作(va_start,va_arg,va_next),你无法
如果我想使用该功能,我可能有哪些缺点

foo(int num,...)

实现可变数量的参数?

我知道你只能使用一种数据类型的第一个缺点.

还有其他办法吗?

解决方法

有多种方法不使用省略号表示法.

为什么?由于类型安全,原始的危险操作(va_start,va_arg,va_next),你无法真正转发到另一个功能等…

但是,与C相反,C提供了模板方法,它提供了类型安全性和通用行为,并且可以通过重载来累积:

template <typename Arg0>
void foo(int num,Arg0 const& arg0);

template <typename Arg0,typename Arg1>
void foo(int num,Arg0 const& arg0,Arg1 const& arg1);

// ... etc

这是当前的技术水平,通常由预处理器编程的微妙应用(检查Boost.Preprocessor)帮助.

使用新的C 0x标准,可变模板提供与C变量方法相同的设施,提供类型安全(yeeha)

template <typename Arg0,typename... Args>
void foo(Arg0 arg0,Args... args)
{
  // Do something with arg0
  foo(args);
}

template <typename Arg0>
void foo(Arg0 arg0)
{
  // Do something with arg0
}

这也允许更容易地定义元组类:)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读