【问题标题】:polymorphism between set and multiset in c++C ++中集合和多集合之间的多态性
【发布时间】:2021-08-08 23:30:58
【问题描述】:

有没有办法使用多态来为集合和多集合提供泛型?如下。

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

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++ set polymorphism std multiset


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 2013-04-02
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    相关资源
    最近更新 更多