如何创建模板数组 - c++
How to create array of templates - c++
我创建了一个带有模板的优先级队列类。将其命名为PQ。如何创建一个 PQ 数组,其中每个元素都是不同类型的 PQ?
尝试做这样的事情,但没有奏效:
template <class T>
PQ<T> *arr[10]; //void pointer can point to everything
arr[0] = new PQ<string>;
arr[1] = new PQ<int>;
编辑1:
我添加了
法典
template <class T>
class PQ : public Pointer_Base
和
class Pointer_Base
{
public:
virtual ~Pointer_Base();//virtual DTOR
virtual void showall();
};
然后在主要我写道:
Pointer_Base * arr[2];
PQ<string> first;
PQ<int> second;
arr[0] = first;
它说 arr[0]=first 行上的错误:
"没有合适的从 PQ 到 Pointer_base* 的转换"
如果我实现了虚拟函数,为什么会出现此错误?附言: showall 函数只是在队列上运行并打印其中的所有值及其优先级。我知道我可能已经用 cout 和运算符重载完成了它,但现在这样做对我来说更容易、更快捷。
这
似乎是让PQ
类从基类继承并存储类型为Base*
的std::vector
或std::array
的完美候选者。然后,您的PQ
类将需要实现 Base
中定义的一些虚函数。 这样的东西可能适合您的需求:
class base
{
public:
// virtual functions that every PQ must implement
virtual ~base() {}
};
template<class T>
class PQ : public base
{
// implement the virtual functions
};
然后要使用它,您将使用类似以下内容:
std::vector<base*> priority_queues; // or even std::unique_ptr<base>
但是,如果您只需要在整个项目的一小部分中执行此操作,则必须使PQ
的所有实例都使用虚函数调用是没有意义的。您可以通过拥有一个包装类来解决此问题,假设wrap<T>
从上述base
继承并且它在内部保存PQ<T>
。然后,包装类可以将函数调用委托给内部结构。这样,您只需在需要时为虚拟功能付费,而不是在整个项目中付费。
假设您稍后还将在项目中混合类型,为此我建议使用 boost::any
.
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '