Tenir compte:C++ SFINAE pour choisir une surcharge entre le type de référence et l'argument converti en référence?
struct BigData {...};
// Let's get a BigData by reference, but use it as a value.
// For example, we may want to make a copy of the object, but we'd
// like to avoid the pass-by-value overhead at the call site.
template <typename T, *some template magic?*>
void processData(T& t) {
printf("Your BigData was converted to a reference argument.\n");
...
}
// Now, we want an overload that will know that there wasn't a
// conversion to reference and will treat it like a reference.
// Perhaps we are adding this BigData to a list of references.
template <typename T, *some template magic?*>
void processData(T& t) {
printf("You gave me a BigData reference.\n");
...
}
int main() {
BigData data;
BigData& ref = data;
processData(data); // "Your BigData was converted to a reference argument."
processData(ref); // "You gave me a BigData reference."
return 0;
}
En bref, mon objectif est d'avoir une distinction entre les surcharges qui, où la liaison d'une référence provenait - soit une valeur du type ou d'un type de référence (déjà). J'ai essayé d'utiliser std::enable_if
et de la famille en combinaison avec des surcharges qui font et ne prennent pas de références à T
, mais je ne peux pas trouver un moyen d'accomplir cela. Toute aide est grandement appréciée!
droit. Je comprends cela, mais mon objectif est d'avoir des surcharges qui distinguent d'où vient la liaison - soit une valeur du type ou un type (déjà) de référence. –
@BrandonKammerdiener jeter un oeil à la réponse mise à jour – Curious
Merci. C'est aussi loin que je l'ai eu, mais idéalement, je voudrais éviter de modifier l'appel. J'apprécie ton aide! –