gpt4 book ai didi

c++ - 包装函数参数?

转载 作者:搜寻专家 更新时间:2023-10-31 02:11:33 24 4
gpt4 key购买 nike

假设我有这个功能:

void foo (struct1 &v1, struct2 &v2, ...,  structn &vn){
//do something with a subset some of the arguments...
foo1(v1, v2, ..., vn);
}

void foo1 (struct1 &v1, struct2 &v2, ..., structn &vn){
//do something with a subset some of the arguments...
foo2(v1, v2, ..., vn);
}

...

void foom (struct1 &v1, struct2 &v2, ..., structn &vn){
//do something with a subset some of the arguments...
}

将所有这些参数封装在一个专用结构中并将其用作唯一参数是否是一种好的做法?像这样的东西:

struct wrapper{
strcut1 v1;
struct2 v2;
...
structn vn;
}

void foo (wrapper & w){
//use some of w's fields
foo1(w);
}

void foo1 (wrapper & w){
//use some of w's fields
foo2(w);
}

...

void foom (wrapper & w){
//use some of w's fields
}

我认为这种方法有两个优点:

  1. 它更易于维护:对于第一种方法,如果我必须向 foom 添加一个新参数,那么我还必须修改所有其他的 m -1 foo header ...一场噩梦。使用此方法,唯一要做的就是向 wrapper 添加一个新字段。
  2. 效率更高:假设n(参数个数)和m(函数个数)都很大(比如两者 10) 这意味着我们必须复制 m*n 地址,这不是很大的开销,但肯定大于 m

一切都正确吗?我错过了一些优势/劣势吗? 请注意,这里的性能是重中之重

为什么我需要这个?

好吧,阅读this问题以了解更多信息。

最佳答案

这取决于您拥有的参数数量。

一般来说,常见的是将许多参数封装到一个名为“params”的结构中,这样函数的原型(prototype)就不会太长。

这个方案的例子是FLANN , kd-GeRaF (我的)和FALCONN .

老实说,我还没有看到参数是结构的情况,所以这是你个人的判断。

关于c++ - 包装函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43386942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com