ich einen Zeiger auf ein Klassenelement als Template-Parameter wie in verwenden möchten:Zeiger auf Klassenelement als Template-Parameter
template <class Class, class Result, Result Class::*Member>
struct MyStruct {
// ...
};
diese Struktur verwenden wie MyStruct<SomeClass, SomeResult, &SomeClass::value> variable
funktioniert gut, aber ich weiß nicht wie dass ich SomeClass
und SomeResult
spezifizieren muss.
Ich möchte MyStruct<&SomeClass::value> variable
verwenden, wenn das möglich ist, aber ohne die Fähigkeit zu verlieren, irgendeine Klasse zu bestehen und irgendeine Ergebnisart zu haben.
ich folgend versucht, aber die Syntax ist illegal:
template <class Class, class Result>
template <Result Class::*Member>
struct MyStruct {
// ...
};
error: too many template-parameter-lists
ich mit einer Hilfsfunktion versucht (die tatsächlich in Clang funktioniert aber von GCC zurückgewiesen):
template <class Class, class Result>
static constexpr auto makeMyStruct(Result Class::*member) ->
MyStruct<Class, Result, member> {
// ...
}
error: use of parameter `member' outside function body
error: template argument 3 is invalid
Ist es möglich, eine einfache MyStruct<&SomeClass::value>
zu haben, und wenn ja, wie?
Verwandte Frage, die nicht meine Frage lösen:
- Pointer to class member as template parameter
- C++0x error with constexpr and returning template function
Dup? http://stackoverflow.com/questions/5628121/is-it-possible-to-emulate-templateauto-x – GManNickG
@GManNickG Ich bin nicht sicher, ob meine Frage auf diese andere Frage läuft. Meins ist viel enger, und ich wäre nicht allzu glücklich mit einem Makro. – kay
Der Begriff ist * Zeiger-zu-Mitglied *, nicht * Verweis * auf Mitglied. Referenzen und Zeiger sind in der Sprache sehr unterschiedlich (na ja, nicht * das * anders, aber immer noch nicht gleich) –