Перегрузка / специализация алгоритмов STL для нелокальных контейнеров (серверная часть базы данных) - PullRequest
1 голос
/ 18 августа 2010

Я хочу в отдельном пространстве имен определить мои собственные реализации sort (), copy () и т. Д., Которые работают с контейнерами таблиц / представлений / и т. Д. Вместо стандартных контейнеров в памяти.Если я определю свой собственный метод sort (), который принимает мой собственный прямой итератор, как компилятор разрешит это?Или, что мне нужно сделать, чтобы он разрешился правильно, т.е. использовать мой собственный sort () вместо std sort (), даже если я могу передавать пользовательские типы итераторов, которые соответствуют стандартным требованиям типа итераторов?

Если бы он использовал std sort (), он все равно работал бы, просто был бы крайне неэффективен, поскольку не передавал бы сортировку в базу данных, в то время как моя реализация sort () работала бы.Я просто не уверен, как правильно вызывать мой sort () через std sort (), когда они имеют одинаковые имена и принимают одинаковые типы.Возможно, я упустил некоторые детали в своем описании, поэтому, пожалуйста, потерпите меня, пытаясь решить эту проблему.

Кроме того, я обнаружил, что следующий вопрос наиболее похож на мой вопрос (упоминает ADLи частичной специализации), но я не уверен, что это напрямую решает мою проблему или описывает лучший способ сделать то, что я описал: Перегрузка for_each для определенных типов итераторов

1 Ответ

4 голосов
/ 19 августа 2010

Это фактически определенное поведение, чтобы специализировать алгоритмы пространства имен std для ваших собственных UDT.

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

Редактировать: Упс Сортировать вместо сортировки.

Редактировать еще раз: О человек, я написал что-то полностьюнеправильно.Это не явный синтаксис спецификации вообще.

...