Ich möchte einen Teil der generischen Bibliothek erstellen, die strukturierte Bindungen zum Zerlegen beliebiger Klassen in seine Bestandteile verwendet. Im Moment gibt es keine variadische Version strukturierter Bindungen (und ich denke, ich kann nicht für die aktuelle Syntax vorgeschlagen werden), aber mein erster Gedanke ist es, eine Reihe von Überladungen einiger Funktionen zu erstellen () , die eine Zerlegung durchführt von Struct Parameter in einen Satz seiner Bestandteile. decompose () sollte nach Anzahl der Parameter -Datenmitglieder (strukturiert ) überlastet werden. Derzeit kann ConstExPR if Syntax auch verwendet werden, um dies zu versenden. Aber wie kann ich etwas Ähnliches wie sizeof ... operator für oben genannte Zwecke emulieren? Ich kann keine Auto -[A, B, C] Syntax irgendwo in Sfinae -Konstruktionen verwenden, da es sich um eine Zersetzungsdeklaration und AFAIK handelt, und eine Deklaration kann nicht in DeclType verwendet werden, Ich kann es auch nicht für meine Zwecke im Körper von Lambda -Funktionen verwenden, da Lambda -Funktionen auch in Vorlagenargumenten nicht verwendet werden können. wie sizeof [] s /
Code: Select all
sizeof[](S)
template< typename type, typename = void >
struct sizeof_struct
{
};
template< typename type >
struct sizeof_struct< type, std::void_t< decltype([] { auto && [p1] = std::declval< type >(); void(p1); }) > >
: std::integral_constant< std::size_t, 1 >
{
};
template< typename type >
struct sizeof_struct< type, std::void_t< decltype([] { auto && [p1, p2] = std::declval< type >(); void(p1); void(p2); }) > >
: std::integral_constant< std::size_t, 2 >
{
};
... etc up to some reasonable arity
< /code>
Möglicherweise können wir sie in die Argumente von Vorlage verwenden. Was denkst du?>