Ich habe einen Speicherpool, der wie so aussieht:Wie erstelle ich einen Speicherpool mit einer beliebigen Anzahl von Containern?
template<typename TreeType>
class LeafMemoryPool
{
public:
void stealNodes(TreeType& tree);
Leaf* getNode();
private:
std::vector<Leaf*> mLeafs;
}
In meinem Programm Ich habe verschiedene TreeType
s, wie FloatTree
und Vec3Tree
, und ich erstelle einen Speicherpool für jede Baumart. Allerdings ist es etwas nervig, diese zu übergeben, und ich würde einen einzelnen Speicherpool bevorzugen, der alle verschiedenen Typen behandelt. Außerdem muss ich in Zukunft möglicherweise weitere Typen hinzufügen, und ich möchte, dass es so dynamisch wie möglich ist. Könnte das mit variablen Vorlagen gemacht werden? Ich habe sie noch nie zuvor benutzt, und ich weiß nicht, ob sie dafür verwendet werden könnten.
Das Szenario I denk könnte als
template<typename... TreeTypes>
class MemoryPool
{
public:
// The template is only valid if the same type was declared
// in TreeTypes above
template<typename TreeType>
void stealNodes(TreeType& tree)
{
// Somehow need to access the right std::vector that
// stores TreeType::Leaf. This function will be called
// a lot, and needs to be determined at compile time
// for it to be useful.
}
template<typename TreeType>
typename TreeType::Leaf* getNode();
private:
// One for each TreeType in TreeTypes.
// The leaf type can be deduced by
// typename TreeType::Leaf
std::vector<LeafArg1*> mLeafsForArg1;
std::vector<LeafArg2*> mLeafsForArg2;
...
}
Alles oben in Pseudo-Code geschrieben werden soll bei der Kompilierung festgelegt werden können. Kann ich das mit einigen C++ - Vorlagen lösen?
std :: tuple wird es tun –
So etwas wie 'template mit MemoryPools = std :: tuple ...>;'. –
Jarod42