假设您有以下类:
template<typename T>
class Node {
public:
T data;
std::vector<Node*> children;
};
我排除了它的方法,因为我想关注另一点:开发人员必须使用std::vector
作为子
的容器。
在对抽象进行编程的上下文中,我想学习如何使std::vector
可以轻松地与以下对象互换:
std::vector
,std::map
,std::list
等方法或用这些方法实现)你知道有哪些方法来完成这个目标,它们的主要优点和缺点是什么?
C++20的概念对这项任务有帮助吗? 如果是的话,我想学习新旧两种方法。
您可以添加一个额外的模板模板参数,如下所示:
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
类,因为这将通知实现。