我要做的是,在一个单独的名称空间中,定义我自己的sort()、copy()等实现,这些实现使用数据库表/视图/etc容器,而不是内存中的std容器。如果我定义自己的sort()来接受我的自定义转发迭代器,编译器如何解决这个问题?或者,我需要做什么才能正确地解决问题,即使用自定义sort()而不是std sort(),即使我可能正在传递符合标准迭代器类型要求的自定义迭代器类型?
如果它使用std sort(),那么它实际上仍然可以工作,因为它不会将排序移交给数据库,而我的sort()实现会非常低效。我只是不知道如何在std sort()上正确地调用sort(),当它们具有相同的名称并接受相同的类型时。我可能在描述中遗漏了一些细节,所以请忍受我在这个问题上的沉重打击。
此外,我发现以下问题与我所问的最相似(提到ADL和部分专业化),但我不确定它是否直接解决了我的问题,或者描述了完成我所描述的工作的最佳方式: Overloading for_each for specific iterator types
它实际上是为您自己的UDT专门化std名称空间算法定义的行为。
namespace std { template<> void sort<sometype::someiterator>(sometype::someiterator begin, sometype::someiterator end) { ... } };
编辑:oopsie排序而不是排序。
再次编辑:哦,伙计,我写了一些完全错误的东西。这根本不是明确的规范语法。