ich etwas bin mit wie:C++ Typ basiertes Caching ohne Verwendung von statischen Speicher
struct VectorCache
{
template<typename T>
std::vector<T>& GetTs()
{
static std::vector<T> ts;
return ts;
}
};
erstellen/einige Vektoren auf der enthaltenen Typ basiert zugreifen. Das funktioniert gut, solange ich nur ein Objekt vom Typ VectorCache
habe, aber wenn ich mehrere Objekte verwende, bekomme ich dieselben Vektoren von allen Instanzen von VectorCache
, da die Vektoren statische Variablen sind.
Ich habe versucht, die Vektoren als Elementvariablen mit etwas ähnlich wie boost::any
zu verschieben und sie mit std::type_index
von T zugreifen, aber das ist irgendwie langsamer als der direkte Zugriff, den ich zuvor verwendet habe.
Eine andere Möglichkeit ist, struct VectorCache
in etwas wie template<int index> struct VectorCache
umzuwandeln, aber das Problem ist immer noch da - ich muss vorsichtig sein, nur eine Instanz/Index zu haben, um korrektes Verhalten zu haben.
Ist es möglich, basierend auf T
direkt auf die Vektoren zuzugreifen, und basiert die Caching-Instanz statt auf der Klasse?
Und ich denke, Sie wollen nicht 'VectorCache' (d. H. Move 'Vorlage ' von der Funktion in die Klasse), oder? Denn dann ist die Elementvariable einfach. –
leemes
Boost.Any ist im Grunde die Idee hinter jeder Lösung. Wenn das zu langsam ist, frage ich mich, ob eine andere Lösung ausreichend schnell sein wird. Eine Karte mit dem Schlüssel 'std :: type_index' kommt mir in den Sinn. –
Wird 'VectorCache' in mehreren Dateien angezeigt? Wenn nicht, ist eine Konvention zum Instanziieren von "Template struct VectorCache" mit "__LINE__" ein üblicher, effektiver, schmutziger kleiner Hack, der mit einem Makro gelockert werden kann. –