Konstruieren Sie ein variadisches std::tuple mit einem Parameterpaket von Konstruktorargumenten
Posted: 20 Jan 2025, 14:01
Ich habe die folgenden Klassendefinitionen. Ich möchte ein Alphabet aus Buchstabenklassen erstellen, bei dem jede Buchstabenklasse mithilfe eines Arguments aus dem Parameterpaket erstellt wird, das an den Alphabet-Konstruktor übergeben wird.
Das Beispiel wird nicht kompiliert, sobald ich alphabet2 und alphabet3 hinzufüge, da argA, argB und argC ALLE an den Konstruktor jedes Objekts im TLetters-Parameterpaket übergeben werden (und nicht an das dazugehörige Argument). .
Ist das möglich? Möglicherweise eine std::integer_sequence verwenden, um rekursiv über das TArgs-Parameterpaket im Alphabet-Konstruktor zu iterieren? Mein Compiler ist nur C++11-kompatibel.
Danke!
Code: Select all
#include
struct ArgA {};
struct ArgB {};
struct ArgC {};
struct A
{
A(ArgA& param) {}
};
struct B
{
B(ArgB& param) {}
};
struct C
{
C(ArgC& param) {}
};
template
struct Alphabet
{
template
Alphabet(TArgs& ...params) : _alphabet(TLetters(params...)...) {}
std::tuple _alphabet;
};
int main()
{
ArgA argA; ArgB argB; ArgC argC;
Alphabet alphabet1(argA); // Compiles
Alphabet alphabet2(argA, argB); // Doesn't compile because argA and argB are passed to A, B and C constructors
Alphabet alphabet3(argA, argB, argC); // Ditto!
}
Ist das möglich? Möglicherweise eine std::integer_sequence verwenden, um rekursiv über das TArgs-Parameterpaket im Alphabet-Konstruktor zu iterieren? Mein Compiler ist nur C++11-kompatibel.
Danke!