Ik loop tegen een (denk ik redelijk triviaal) probleem aan waar ik geen oplossing voor heb kunnen vinden op zowel Google als GoT. Het gaat om het volgende probleem in C++.
Stel ik heb een tweetal functies die beide hun parameters by reference doorgeven. Gegeven bijvoorbeeld de volgende (fictieve) functies:
Stel nu dat ik een andere functie heb waarin ik bovenstaande functie gebruik:
Mijn compiler geeft hierop een error en ik denk dat ik snap waarom. x is al een reference en geen int. Bij het aanroepen van Add pass je dus eigenlijk een reference naar een reference en dat is niet wat de compiler verwacht op grond van de definitie van de functie Add.
Een mogelijke oplossing is natuurlijk om Add niet langer de parameters als pass-by-reference door te geven, echter Add wordt ook buiten DoIets aangeroepen en omwille van efficientie is het geen mogelijkeheid om eerst een lokale kopie van de data te maken (door dus niet meer de reference te passen, maar het object zelf...).
Een andere oplossing zou zijn om de code van Add over te nemen in DoIets, maar dat is om wille van de modulariteit in mijn geval niet direct gewenst.
Is er een mogelijkheid de functie Add binnen DoIets aan te roepen waarbij de parameters alsnog als reference gepassed worden? Het is voor de snelheid van de code aboluut van groot belang. Of doe ik in dit geval beter een pass by pointer?
Stel ik heb een tweetal functies die beide hun parameters by reference doorgeven. Gegeven bijvoorbeeld de volgende (fictieve) functies:
code:
1
2
3
| void Add(int & x, int & y) {
x += y;
} |
Stel nu dat ik een andere functie heb waarin ik bovenstaande functie gebruik:
code:
1
2
3
4
5
| void DoIets(int & x, int & y) {
...
Add(x,y)
...
} |
Mijn compiler geeft hierop een error en ik denk dat ik snap waarom. x is al een reference en geen int. Bij het aanroepen van Add pass je dus eigenlijk een reference naar een reference en dat is niet wat de compiler verwacht op grond van de definitie van de functie Add.
Een mogelijke oplossing is natuurlijk om Add niet langer de parameters als pass-by-reference door te geven, echter Add wordt ook buiten DoIets aangeroepen en omwille van efficientie is het geen mogelijkeheid om eerst een lokale kopie van de data te maken (door dus niet meer de reference te passen, maar het object zelf...).
Een andere oplossing zou zijn om de code van Add over te nemen in DoIets, maar dat is om wille van de modulariteit in mijn geval niet direct gewenst.
Is er een mogelijkheid de functie Add binnen DoIets aan te roepen waarbij de parameters alsnog als reference gepassed worden? Het is voor de snelheid van de code aboluut van groot belang. Of doe ik in dit geval beter een pass by pointer?
Ik ben geheel voldaan, dank u wel!