#include using namespace std; void put (string s) { cout << "retezec " << s << endl; } void put (int p) { cout << "cele cislo " << p << endl; } void put (double p) { cout << "cislo " << p << endl; } void put (char c) { cout << "pismeno " << c << endl; } void print () { } template void print (T head, S ... other) { put (head); print (other ...); } void f () { print (1, 1.2, "abc", 'c'); } #include "mainwindow.h" #include #include #include using namespace std; #include class Section { public: QString name; QVector items; QVector
sections; Section (QString name0) : name (name0) {} }; void add (Section & sect, QString item) { sect.items.append (item); cout << "add " << item.toStdString () << " to section " << sect.name.toStdString () << endl; } void add (Section & sect, Section item) { sect.sections.append (item); cout << "add section " << item.name.toStdString () << " to section " << sect.name.toStdString () << endl; } void expand (Section & sect) { } template< class S, class ... T > void expand (Section & sect, S head, T... tail) { add (sect, head); expand (sect, tail...); } template< class ... T > Section section (QString name, T ... params) { Section result (name); expand (result, params...); return result; } int main(int argc, char *argv[]) { Section a = section ("acko", "alpha"); Section b = section ("becko", "beta", a); Section c = section ("cecko", "gamma", section ("decko", b)); QApplication app(argc, argv); MainWindow w; w.show(); return app.exec(); } === Pripadne s konstuktorem === class Section { public: QString name; QVector items; QVector
sections; Section (QString name0) : name (name0) {} template< class ... T > Section (QString name0, T ... params); }; void add (Section & sect, QString item) { sect.items.append (item); cout << "add " << item.toStdString () << " to section " << sect.name.toStdString () << endl; } void add (Section & sect, Section item) { sect.sections.append (item); cout << "add section " << item.name.toStdString () << " to section " << sect.name.toStdString () << endl; } void expand (Section & sect) { } template< class S, class ... T > void expand (Section & sect, S head, T... tail) { add (sect, head); expand (sect, tail...); } template< class ... T > Section section (QString name, T ... params) { Section result (name); expand (result, params...); return result; } template< class ... T > Section::Section (QString name0, T ... params) : name (name0) { expand (*this, params...); } int main(int argc, char *argv[]) { Section a = section ("acko", "alpha"); Section b = section ("becko", "beta", a); Section d = section ("decko", "delta", section ("cecko", "gamma", b)); Section e ("ecko", "epsilon", d); } === Vse uvnitr tridy === class Section { public: QString name; QVector items; QVector
sections; Section (QString name0) : name (name0) {} static void add (Section & sect, QString item) { sect.items.append (item); cout << "add " << item.toStdString () << " to section " << sect.name.toStdString () << endl; } static void add (Section & sect, Section item) { sect.sections.append (item); cout << "add section " << item.name.toStdString () << " to section " << sect.name.toStdString () << endl; } static void expand (Section & sect) { } template< class S, class ... T > static void expand (Section & sect, S head, T... tail) { add (sect, head); expand (sect, tail...); } template < class ... T > Section (QString name0, T ... params) : name (name0) { expand (*this, params...); } template < class ... T > static Section section (QString name, T ... params) { Section result (name); expand (result, params...); return result; } }; template < class ... T > static Section section (QString name, T ... params) { return Section::section (name, params ...); } int main (int argc, char *argv[]) { Section a = section ("acko", "alpha"); Section b = section ("becko", "beta", a); Section d = section ("decko", "delta", section ("cecko", "gamma", b)); }