Ich kann nicht scheinen, eine gute Lösung für die Verwendung von SFINAE mit variadic Vorlagenklassen zu finden.SFINAE mit variadischen Template-Klassen?
Sagen wir, ich ein variadische Template-Objekt haben, die keine Referenzen mag:
template<typename... Args>
class NoRef
{
//if any of Args... is a reference, this class will break
//for example:
std::tuple<std::unique_ptr<Args>...> uptrs;
};
Und eine Klasse, die, wenn ein Argument Pack enthält Verweise bequem überprüft:
template<typename T, typename... Other>
struct RefCheck
{
static const bool value = std::is_reference<T>::value || RefCheck<Other...>::value;
};
template<typename T>
struct RefCheck<T>
{
static const bool value = std::is_reference<T>::value;
};
Wie verwende ich dies zu spezialisieren NoRef für den Fall, dass Referenzen in der Arg-Packung vorhanden sind?
+1. Aber ich denke 'Vorlage Struktur NoRef: NoRef_ :: Wert, Args ...> {};' wäre besser. Nun ist 'NoRef' eine andere Klassenvorlage ohne Nicht-Typ-Vorlagenparameter (d. H. Boolescher Wert). –
Nawaz
Ich mag diese Lösung, obwohl ich Vorlagen in MSVC noch nicht Aliasvorlagen kann. Aber Nawaz hat auch dafür eine Lösung gefunden. –