让我们假设我有这样的功能:包装函数参数?
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
}
我认为,这种做法有2个优势:
- 它更易于维护:与第一种方法,如果我有一个新的参数添加到
foom
,那我也修改所有其他的m-1
foo
标题......一场噩梦。使用这种方法,唯一要做的就是向wrapper
添加一个新字段。 - 这是更有效的:假设两个
n
(参数的个数)和m
(函数的数量)大(比如两个10),这意味着我们必须复制m*n
地址,这是不是一个大的开销,但肯定比m
大。
一切正确吗?我错过了一些优势/劣势? 请注意,在这里表现都优先
为什么我需要这个?
那么,读this问题了解更多关于它。
有没有人可以解释这种效应结构如何对齐?包装结构中是否会有巨大的空白空间? –
@MartinZhai感谢您的评论。请解释我为什么这应该是一个问题?据我所知,当我们想利用向量化时,数据对齐是有用的,但这不是这种情况。还是你的意思是别的? – justHelloWorld
当您将多个结构放入包装结构中时,子结构具有不同的大小,编译器是否将它们对齐以提高性能? https://en.wikipedia.org/wiki/Data_structure_alignment –