为非本地容器重载/专门化STL算法(数据库后端)

时间:2010-08-18 19:51:51

标签: c++ templates function stl overloading

我想要做的是,在一个单独的命名空间中,定义我自己的sort(),copy()等实现,它们使用数据库表/ views / etc容器而不是内存中的std容器。如果我定义自己的sort()接受我的自定义前向迭代器,编译器如何解决?或者,我需要做什么才能正确解析,即使用我的自定义sort()而不是std sort(),即使我可能传递符合标准迭代器类型要求的自定义迭代器类型?

如果它使用std sort(),它实际上仍然有效,它只会非常低效,因为它不会将排序交给数据库,而我的sort()实现会。我只是不确定当它们具有相同的名称并接受相同的类型时,如何正确调用我的sort()而不是std sort()。我可能已经错过了我的描述中的一些细节,所以请耐心等待我解决这个问题。

另外,我发现以下问题与我提出的问题最相似(提及ADL和部分专业化),但我不确定它是否直接解决了我的问题或描述了最佳的做法我所描述的: Overloading for_each for specific iterator types

1 个答案:

答案 0 :(得分:4)

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

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

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

再次编辑:哦,伙计,我写错了。这根本不是明确的规范语法。