Ich habe eine Weile daran fest, und mir gingen die Ideen aus, helfen geschätzt!Iterating variadic Vorlagentypen
Die folgenden Segmente sind Beispielcode, um zu vereinfachen.
gelten folgende Voraussetzungen:
class Base;
class DerivedA : public Base;
class DerivedB : public Base;
und diese:
class Manager {
public:
std::map<std::type_index, Base*> container;
template<typename ...T>
void remove() {
// Iterate through templates somehow and...
container.erase(typeid(T));
}
}
Im Grunde bin ich zu speichern, in einem Behälter, eindeutige Instanzen von abgeleiteten Klassen, durch die std :: type_index als Schlüssel. Erlauben mir, wie etwas zu tun:
manager.remove<DerivedA>();
das gesagt ist, würde ich in der Lage sein mag, das Gleiche zu tun, sondern können mehrere Vorlagen mehrere Instanzen direkt auf einmal zu entfernen, wie zum Beispiel:
manager.remove<DerivedA, DerivedB>()
ich weiß, es möglich ist, durch variadische Vorlagen iterieren als here beschrieben, aber ich halte Kompilierungsfehlern bekommen ...
error C2440: 'initializing': cannot convert from 'initializer-list' to 'std::initializer_list'
error C3535: cannot deduce type for 'auto' from 'initializer-list'
... wenn ich versuche, diesen Code auszuführen :
template<typename ...T>
void remove() {
// Iterate through templates somehow and...
auto list = {(container.erase(typeid(T)))... };
}
Irgendwelche Ideen? Vielen Dank.
'int dummy [] = {(c.resease (typeid (T)), 0) ...};' –
Woah, Ihre Lösung funktionierte perfekt direkt aus der Box ... Ich habe etwas ähnliches versucht früher, aber ohne die 0. Was ist der Unterschied? –
'0' ist ein' int'. –