Also mache ich ein paar Hausaufgaben, wo ich meine eigene Kompilierzeit Integer-Sequenz in C++ 11 schreiben und ein paar Funktionen dafür schreiben concat, sortiere etc.), aber ich habe ein wenig Mühe, meinen Kopf darum zu wickeln, wie ich diese Dinge schreiben würde.Drucken Compile-Zeit Integer-Sequenz in C++ 11
template<typename T, typename Comp = std::less<int>>
struct Facility{
template<T ... Nums>
struct List{
struct Element<T ... nums>{};
template<unsigned num, T val, T ... rest>
struct Element{
unsigned index = num;
T value = val;
Element<index-1, rest...> others;
};
template<unsigned num, T val, T ... rest>
struct Element<0, val>{
unsigned index = 0;
T value = val;
};
static constexpr Element<sizeof...(Nums)-1,Nums...> elem = {};
static void Print()
{
// Prints out the list
}
};
};
using IntList = typename Facility<int>::List<intlist...>;
int main()
{
using List1 = IntList<1, 2, 3>;
List1::print()
}
Ich würde nur gerne wissen, ob ich auf dem richtigen Weg bin, damit ich in eine Sackgasse nicht selbst arbeiten. Ich bin nicht 100% sicher auf die static print()
und die static constexpr
Mitglied in List
, obwohl ich nicht auf andere Weise denken kann, damit es funktioniert.
Sowohl die Einrichtung als auch die Liste wurden in der Aufgabenbeschreibung bereitgestellt. Funktionen wie Sortieren usw. müssen in Facility bereitgestellt werden, während Print die einzige Funktion in List ist. Ich erkannte, dass ein Großteil meines Problems davon herrührte, dass die Liste ein tatsächliches Objekt war, wohingegen ich es als eine Kette von verketteten, von Meta-Funktionen erzeugten Strukturen hätte denken müssen. Ich denke, es sollte alles in Ordnung sein, von hier aus weiterzugehen. Danke vielmals! – ozma