假设我们有这个功能模板:
template<typename T, typename... Args>
T* creator(const Args&... args)
{
return new T{args...};
}
现在我想在某个容器中保存一些指向此模板实例的指针。为此,我制作了reinterpret_cast<void*>(creator<type_a, type_b, etc>)
。但是当我进行反向操作时,我可以进行一些检查以确保此操作是否安全。即一个(先前保存的)指向void的指针是否实际指向我们试图转换为的模板实例?
可能还需要保存某种类型的信息,而不仅仅是void*
。或类似的东西。
修改
实际上,此模板是类模板的私有静态成员。其实例化的指针保存在std::unordered_map<std::string, void*>
中。它们用另一种方法调用:
template<typename... Args>
T* create(const std::string& id, const Args&... args)
try
{
return reinterpret_cast<T* (*)(const Args&...)>(_creators.at(id))(args...);
}
catch(...)
{
return nullptr;
}
在这里,我可以检查_creator
中是否注册了具体的_creators
实例。