我一直坚持这一段时间,我跑出了想法,帮助赞赏!迭代可变模板类型
为了简化,下面的段是示例代码。
假定以下:
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'。 –