考慮する: - タイプの値または(すでに)参照型のいずれか要するにC++ SFINAEは参照型と参照型に変換された引数の間のオーバーロードを選択しますか?
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;
}
を、私の目的は、結合基準がどこから来たかを区別オーバーロードを持つことです。私はstd::enable_if
を使用して試してみましたが、ファミリは、T
への参照をしていないオーバーロードと組み合わせて使用しましたが、これを達成する方法が見つかりません。どんな助けでも大歓迎です!
右であるかどうかを検査する場合は、次のような何かをする必要があります。しかし、私の目的は、バインディングがどこから来たのか(型の値か(既に)参照型のどちらか)を区別するオーバーロードを持つことです。 –
@BrandonKammerdienerは更新された答えを見てください – Curious
ありがとうございます。これは私の知る限りではありますが、理想的には電話を変更しないようにしたいと思います。私はあなたの助けに感謝します! –