in C++ 11 Ich habe sehr ordentlich und Arbeits Code std::tuple
Artikel nach Typ zum Extrahieren (Als ich diese Funktion auch placed kennen zu C++ 14 stl)std :: tuple, erhalten Artikel von ererbten Typ
jetzt bin ich mit der Aufgabe, vor dem Code auszuwählen Element durch die geerbte Klasse Spezifikation
struct A
{
int a;
};
struct B : public A
{
int b;
};
...
auto tval = std::make_tuple(1, B());
//now I would like to reference items as following:
tuple_ref_by_inheritance<A>(tval).a = 5; //Access to B instance by parent A
Es folgt mein erfolglos Versuch:
template< class T, class Tuple >
struct tuple_ref_index;
// recursive case
template<class T, class Head, class... Tail >
struct tuple_ref_index<T, std::tuple<Head, Tail...> >
{
enum { value = tuple_ref_index<T, std::tuple<Tail...>>::value + 1 };
};
template<class T, class Head, class... Tail >
struct tuple_ref_index<T, std::tuple<Head, Tail...> >
{
const static typename std::enable_if<
std::is_same<T, Head>::value>::type* _= nullptr;
enum { value = 0 };
};
template <class T, class Tuple>
inline T& tuple_ref_by_inheritance(Tuple& tuple)
{
return std::get< tuple_ref_index<T, Tuple>::value >(tuple);
}
Was ist der Anwendungsfall die '1' für mit? Erwarten Sie mehr als eine abgeleitete Klasse in dem Tupel, aus dem Sie auswählen möchten? – AndyG
@AndyG nur ein Beispiel für Tupel, die neben A/B einen anderen Wert haben. (2) Ich verspreche, verwende nicht 2 absteigend von einer Schnittstelle – Dewfy