Zeiger auf Klassenmitglied als Vorlagenparameter
Ich möchte einen Zeiger auf ein Klassenmitglied als Vorlagenparameter verwenden, wie in:
template <class Class, class Result, Result Class::*Member>
struct MyStruct {
// ...
};
Verwenden Sie diese Struktur wieMyStruct<SomeClass, SomeResult, &SomeClass::value> variable
funktioniert ganz gut, aber ich mag es nicht, dass ich angeben mussSomeClass
undSomeResult
.
Ich würde gerne nutzenMyStruct<&SomeClass::value> variable
Wenn dies möglich ist, aber ohne die Fähigkeit zu verlieren, eine Klasse zu bestehen und einen Ergebnistyp zu haben.
Ich habe Folgendes versucht, aber die Syntax ist ungültig:
template <class Class, class Result>
template <Result Class::*Member>
struct MyStruct {
// ...
};
Fehler: zu viele Template-Parameter-Listen
Ich habe versucht, eine Hilfsfunktion zu verwenden (die zwar in Clang funktioniert, aber von GCC abgelehnt wird):
template <class Class, class Result>
static constexpr auto makeMyStruct(Result Class::*member) ->
MyStruct<Class, Result, member> {
// ...
}
Fehler: Verwendung des Parameters 'member' außerhalb des Funktionskörpers
Fehler: Vorlagenargument 3 ist ungültig
Ist es möglich, eine einfache zu habenMyStruct<&SomeClass::value>
und wenn ja, wie?
Verwandte Frage, die meine Frage nicht gelöst hat:
Zeiger auf Klassenmitglied als Template-ParameterC ++ 0x Fehler mit constexpr und Rückgabe der Template-Funktion