我已经被困在这一段时间了,我的想法用尽了,帮助赞赏!
以下段是示例代码,以简化.
假设如下:
class Base;
class DerivedA : public Base;
class DerivedB : public Base;
Run Code Online (Sandbox Code Playgroud)
还有这个:
class Manager {
public:
std::map<std::type_index, Base*> container;
template<typename ...T>
void remove() {
// Iterate through templates somehow and...
container.erase(typeid(T));
}
}
Run Code Online (Sandbox Code Playgroud)
基本上我通过使用std :: type_index作为键,在容器中存储派生类的唯一实例.允许我这样做:
manager.remove<DerivedA>();
Run Code Online (Sandbox Code Playgroud)
话虽如此,我希望能够做同样的事情,但允许多个模板直接删除多个实例,如下:
manager.remove<DerivedA, DerivedB>()
Run Code Online (Sandbox Code Playgroud)
我知道可以迭代这里描述的可变参数模板,但我不断收到编译错误......
错误C2440:'初始化':无法从'initializer-list'转换为'std :: initializer_list'
错误C3535:无法从'initializer-list'推断出'auto'的类型
...当我尝试运行此代码时:
template<typename ...T>
void remove() {
// Iterate through templates somehow and...
auto list = {(container.erase(typeid(T)))... };
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?非常感谢你.
c++ templates initializer-list variadic-templates multiple-arguments