考虑这些简化的类(接口和模板化的派生类):
class Interface
{
virtual ~Interface() = default;
};
template<typename... T>
class Derived : public Interface
{
std::tuple<T...> member;
};
然后将派生类的任意模板类型推入保存接口指针的数据向量。
std::vector<Interface*> data;
push_back(new Derived<int, float>{});
push_back(new Derived<float, float>{});
push_back(new Derived<double, char>{});
我的问题是我如何从Interface*
获得模板类型而不知道它是什么类型(因为我不知道它是什么类型,我也不能将它转换为适当的类型)。最好将vector的每个索引与模板中使用的类型关联起来。
我尝试为每个派生类存储类型定义/别名,但我找不到实现这一点的方法。由于类/类型是编译时的概念,这可能实现吗?
模板类型仅在编译时存在。您无法从Ìnterface
中获得模板类型。但是您可以创建一个运行时类型来表示您的类型。在c++中,RTTI/运行时类型信息支持非常有限。但是看一下type_index