我一直堅持這一段時間,我跑出了想法,幫助讚賞!迭代可變模板類型
爲了簡化,下面的段是示例代碼。
假定以下:
class Base;
class DerivedA : public Base;
class DerivedB : public Base;
和此:
class Manager {
public:
std::map<std::type_index, Base*> container;
template<typename ...T>
void remove() {
// Iterate through templates somehow and...
container.erase(typeid(T));
}
}
基本上我存儲,在容器中,派生類的獨特實例,通過使用標準:: type_index作爲鍵。讓我做這樣的事情:
manager.remove<DerivedA>();
雖這麼說,我想能夠直接做同樣的事情,但允許多個模板一次刪除多個實例,因爲這樣的:
manager.remove<DerivedA, DerivedB>()
我知道這是可能的,描述here通過可變參數模板進行迭代,但我不斷收到編譯錯誤......
error C2440: 'initializing': cannot convert from 'initializer-list' to 'std::initializer_list'
error C3535: cannot deduce type for 'auto' from 'initializer-list'
...當我嘗試運行這段代碼:
template<typename ...T>
void remove() {
// Iterate through templates somehow and...
auto list = {(container.erase(typeid(T)))... };
}
任何想法? 非常感謝。
'int dummy [] = {(c.erase(typeid(T)),0)...};' –
Woah,您的解決方案非常適合開箱即用...我嘗試了類似的東西更早但沒有0.有什麼區別? –
'0'是一個'int'。 –