参数化对象的向量
Vector of parametric objects
我想创建一个参数类型的对象的向量,其中每个对象都有不同的专用类型。例:
template<typename A>
struct BaseAtom
{
A _a;
};
struct AtomA : BaseAtom<int>
{};
int main()
{
std::vector<BaseAtom*> v; // (1)
AtomA a;
v.push_back(&a);
}
从逻辑上讲,这是行不通的,因为 BaseAtom 是一种模板类型,并且模板参数未在 (1) 中指定。如何创建具有此特征的向量?
您可以从
一个常见的非模板化类派生BaseAtom<A>
,并存储指向该类的指针:
struct Base {};
template<typename A>
struct BaseAtom: Base
{
A _a;
};
struct AtomA : BaseAtom<int>
{};
int main()
{
std::vector<Base*> v; // (1)
AtomA a;
v.push_back(&a);
}
要么选择模板的一些专门化来放入向量:
std::vector<BaseAtom<int>*> v;
或定义非模板基类:
struct BaseAtomBase {}; // put anything independent of the template parameter here
template <typaname A>
struct BaseAtom : BaseAtomBase
{
A _a;
};
std::vector<BaseAtomBase*> v;
但请注意,这不允许你从 Vector 访问对象的模板化部分。
您需要找出其中哪些(如果有的话)适合您尝试解决的问题。
相关文章:
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 迭代时从向量和内存中删除对象
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 如何创建从同一类继承的不同对象的向量
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 从多个源构造一个对象,包括一个对象向量
- 在C 中,是否有可能在不兼容类型的std ::向量对象之间传输不同类型的缓冲区
- 将向量对象存储在共享指针投掷错误中
- E0312,C2664尝试将向量对象作为函数参数传递时错误
- 相对于向量对象的两个成员,找到两个向量的相交的有效方法
- 将数据从文件读取到向量对象
- C 向量对象访问
- 向量对象声明后的括号是什么意思
- 2向量对象指向相同的分配内存
- 如何返回向量对象
- 传递单个或向量对象时没有重载函数的实例
- 指向数组和向量对象的指针
- 向量对象库,可以存储其他对象类型的对象
- 如何从另一个向量/对象集构造新的向量/指针集