代码之家  ›  专栏  ›  技术社区  ›  Brett Rossier

非本地容器的重载/专用STL算法(数据库后端)

  •  1
  • Brett Rossier  · 技术社区  · 16 年前

    我要做的是,在一个单独的名称空间中,定义我自己的sort()、copy()等实现,这些实现使用数据库表/视图/etc容器,而不是内存中的std容器。如果我定义自己的sort()来接受我的自定义转发迭代器,编译器如何解决这个问题?或者,我需要做什么才能正确地解决问题,即使用自定义sort()而不是std sort(),即使我可能正在传递符合标准迭代器类型要求的自定义迭代器类型?

    如果它使用std sort(),那么它实际上仍然可以工作,因为它不会将排序移交给数据库,而我的sort()实现会非常低效。我只是不知道如何在std sort()上正确地调用sort(),当它们具有相同的名称并接受相同的类型时。我可能在描述中遗漏了一些细节,所以请忍受我在这个问题上的沉重打击。

    此外,我发现以下问题与我所问的最相似(提到ADL和部分专业化),但我不确定它是否直接解决了我的问题,或者描述了完成我所描述的工作的最佳方式: Overloading for_each for specific iterator types

    1 回复  |  直到 16 年前
        1
  •  4
  •   Puppy    16 年前

    它实际上是为您自己的UDT专门化std名称空间算法定义的行为。

    namespace std {
        template<> void sort<sometype::someiterator>(sometype::someiterator begin, sometype::someiterator end) {
        ...
        }
    };
    

    编辑:oopsie排序而不是排序。

    再次编辑:哦,伙计,我写了一些完全错误的东西。这根本不是明确的规范语法。

    推荐文章