У меня есть класс С++, но я также использую C низкого уровня и мне нужно использовать функцию bsearch
. Последний аргумент bsearch
— это функция сравнения, и я хочу реализовать указанную функцию таким образом, чтобы она могла получить доступ к константным закрытым переменным класса.
Проблема в том, что если я сделаю функцию сравнения функцией-членом, она не будет работать, потому что она не будет преобразована в обычный указатель на функцию. Если я создам функцию, не являющуюся членом, я могу передать ее bsearch
, но не смогу получить доступ к закрытым переменным класса.
Что делать?
3 означает, что есть 3 элемента. 16,32,56 — это байты смещения. Мне нужен bsearch для поиска актеров. Я ищу в массиве смещений. указатель для вычисления местоположений в функции сравнения.actorFIle является частной переменной класса.
std::lower_bound
может принимать любой функтор (функцию или объект, для которого определен оператор(), включая лямбда-выражения). А с объектом вы можете хранить любые переменные, необходимые для сравнения. - person kmdreko   schedule 10.10.2017bsearch
пришлось бы прибегать к глобальным переменным. Это запах. - person StoryTeller - Unslander Monica   schedule 10.10.2017int compare(const void*,const void*)
, а экземпляры передаются как параметры. кстати я ни в коем случае не пытаюсь защищаться с помощью bsearch - person 463035818_is_not_a_number   schedule 10.10.2017bsearch
некоторые вещи низкого уровня C. Не то, чтобыbsearch
использовался для сортировки экземпляров класса (что было бы ужасно). - person StoryTeller - Unslander Monica   schedule 10.10.2017