提问者:小点点

从特定的容器类型(指向自身的指针)泛化类的成员


假设您有以下类:

template<typename T>
class Node {
public:
    T data;
    std::vector<Node*> children;
};

我排除了它的方法,因为我想关注另一点:开发人员必须使用std::vector作为的容器。

在对抽象进行编程的上下文中,我想学习如何使std::vector可以轻松地与以下对象互换:

  1. STL中的另一个容器
  2. 一个抽象类,具有自己的一组方法(可能成为std::vectorstd::mapstd::list等方法或用这些方法实现)

你知道有哪些方法来完成这个目标,它们的主要优点和缺点是什么?

C++20的概念对这项任务有帮助吗? 如果是的话,我想学习新旧两种方法。


共1个答案

匿名用户

您可以添加一个额外的模板模板参数,如下所示:

template<template <typename...> typename Container, typename T>
class Node {
public:
    T data;
    Container<Node*> children;
};

然后用不同的容器实例化node:

Node<std::vector, int> n;
Node<std::set, int> m;

但是,如果您想做类似于

Node<std::map, int> m;

您会遇到问题,因为map需要至少2个模板参数,而您只使用了node*

在尝试任何特定的实现策略之前,我建议您考虑如何使用node类,因为这将通知实现。