C++ 中 set 和 multiset 之间的多态性

polymorphism between set and multiset in c++

提问人:Luis Miguel Baez 提问时间:5/20/2021 更新时间:5/20/2021 访问量:108

问:

有没有办法使用多态性来获得集合和多集的泛型?如下。

注意:但仅适用于集合,(集合,多集)

template<typename T>
void foo(parent_set<T> &s) {
    // do something
}
// main
set<int> s1 = {1, 2, 3, 4, 5};
foo(s1);
multiset<int> s2 = {1, 2, 2, 2, 2, 3};
foo(s2); 
C++ 态性 std 多集

评论

2赞 François Andrieux 5/20/2021
由于您无论如何都在使用模板,因此您可以只为整个容器类型编写模板。
2赞 Cory Kramer 5/20/2021
不能在不相关的类型之间具有多态行为(即没有继承关系)。相反,在这种情况下,您可以依靠使用模板的鸭子输入。

答:

5赞 Armen Tsirunyan 5/20/2021 #1

那么,你为什么不把整个容器作为你的模板参数呢?

template <class SetType>
void foo( SetType&  s)
{
    using T = typename SetType :: value_type;
    enter code here
    ....
}

参数只能是集合或多集的限制(通常对模板执行)是通过将模板参数用作集合来强制执行的。例如,您使用单个参数调用 insert,因此您不能传递向量。如果有第三个未知的容器具有所有必需的接口,也许也允许它是有意义的?