Ich weiß, dass das in C++ 03 nicht möglich war, aber ich hoffe, dass es einen neuen Voodoo gibt, der mir erlaubt, dies zu tun. Siehe unten:Gibt es in C++ 11 sowieso, um Mitglied Zeigertyp innerhalb einer Vorlage zu erhalten?
template <class T>
struct Binder
{
template<typename FT, FT T::*PtrTomember>
void AddMatch();
};
struct TestType
{
int i;
};
int main(int argc, char** argv)
{
Binder<TestType> b;
b.AddMatch<int,&TestType::i>(); //I have to do this now
b.AddMatch<&TestType::i>(); //I'd like to be able to do this (i.e. infer field type)
}
Gibt es eine Möglichkeit, dies in C++ 11 zu tun? Will declltype Hilfe?
** UPDATE: Verwenden von Vlads Beispiel war ich so etwas wie dieses Denken funktionieren würde (Einschränkung: Ich habe nicht kompiliert, wie ich den Compiler mit decltype Unterstützung jetzt bin Gebäude)
template <class T>
struct Binder
{
template<typename MP, FT ft = decltype(MP)>
void AddMatch()
{
//static_assert to make sure MP is a member pointer of T
}
};
struct TestType
{
int i;
};
int main()
{
Binder<TestType> b;
b.AddMatch<&TestType::i>();
}
würde diese Arbeit?
Da Sie es explizit angeben, bezweifle ich, dass es einen Weg gibt. Es sollte sogar in C++ 03 funktionieren, wenn es stattdessen 'AddMatch (& TestType :: i)' war. –
Was müssen Sie mit dem Zeiger-zu-Element tun? Es kann sein, dass es eine bessere Lösung gibt, als einen Zeiger-zu-Element als Nicht-Typ-Vorlagenparameter zu verwenden. – bames53