2016-07-16 12 views
1

Dies ist eher eine Kuriosität mit C++ - Vorlagen als etwas Nützliches. Es sollte eine Klasse mit einer variablen Anzahl von Mitgliedern sein. Ist es wahrscheinlich, dass dies zum direkten Mitgliederzugriff kompiliert wird?Template-Klasse mit variabler Anzahl von Mitgliedern in C++

// type equality 
template <typename X, typename Y> struct Eq { static const bool out = false; }; 
template <typename X> struct Eq<X, X> { static const bool out = true; }; 

template <typename First, typename... Rest> 
class Table { 
    First _field; 
    Table<Rest...> _nextTable; 
public: 
    template <typename T> 
    T &get() { 
     if (Eq<First, T>::out) 
      return (T&)_field; 

     return (T&)_nextTable.get<T>(); 
    } 
}; 

template<typename First> 
class Table<First> { 
    First _field; 
public: 
    template <typename T> 
    T &get() { 
     return _field; 
    } 
}; 

int main() { 
    Table<int, double> table; 
    table.get<double>() = 11.1; 
} 
+2

Sie können nicht nur die Montage überprüfen? Google godbolt Compiler Explorer, und lochen den Code dort hinein. –

+7

Es sieht für mich so aus, als ob Sie ['std :: tuple'] grundsätzlich neu implementieren (http://en.cppreference.com/w/cpp/utility/tuple). –

+1

Mit Optimierungen am wahrscheinlichsten ja. – Arunmu

Antwort

Verwandte Themen