Supposons que j'ai cette fonction:Wrapping arguments de la fonction?
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...
}
est-il une bonne pratique de résumer tous ces arguments à l'intérieur d'une structure dédiée et de l'utiliser à la place que le seul argument? Quelque chose comme:
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
}
Je pense que cette approche a 2 avantages:
- Il est plus maintenable: avec la première méthode, si je dois ajouter un nouvel argument à
foom
, alors je dois modifier également tous les autresm-1
foo
en-têtes ... un cauchemar. Avec cette méthode, la seule chose à faire est d'ajouter un nouveau champ àwrapper
. - Il est plus efficace: en supposant que les deux
n
(le nombre d'arguments) etm
(le nombre de fonctions) est grand (par exemple à la fois 10) cela signifie que nous devons copierm*n
adresses, ce qui est pas un gros frais généraux , mais à coup sûr plus grand quem
.
Est-ce que tout est correct? Ai-je manqué un avantage/désavantage? Notez que la performance est ici la priorité
Pourquoi j'ai besoin de cela?
Eh bien, lisez this question pour en savoir plus à ce sujet.
Quelqu'un pourrait-il expliquer comment cet effet struct s'aligne? Y aura-t-il un énorme espace vide dans la structure wrapper? –
@MartinZhai Merci pour votre commentaire. S'il vous plaît, pourrait m'expliquer pourquoi cela devrait être un problème? À ma connaissance, l'aligment de données est utile lorsque l'on veut exploiter la vectorisation, ce qui n'est pas le cas ici. Ou voulez-vous dire quelque chose d'autre? – justHelloWorld
Lorsque vous mettez des structures multiples dans une structure wrapper, les sous-structures ont une taille différente, est-ce que le compilateur les alignera pour améliorer les performances? https://en.wikipedia.org/wiki/Data_structure_alignment –