LINUX.ORG.RU

Имя метода совпадает с именем библиотечной функции

 , , ,


0

2

Унаследовалась от класса в котором есть публичные методы CClassname::read и CClassname::write. Есть какой-нибудь способ обратиться к библиотечным read и write? Очень не хочется лезть в чужой код


Использовать соответсвующий скоуп. В данном случае глобальный :: — ::read() / ::write().

andreyu ★★★★★
()
Ответ на: комментарий от thesame

да знаю я...
учусь же и спросить было неукого. применять приходится быстрее чем изучать

nyka
() автор топика

Сразу подскажу автору способ защиты от макроса: если есть, например, макрос min, а хочется объявить метод min или вызвать метод min, достаточно вместо min написать (min)

quiet_readonly ★★★★
()
Ответ на: комментарий от quiet_readonly

Чувак, спасибо! На один пробел в знаниях стало меньше.

#include <stdio.h>

#define min(a, b) ((a) < (b) ? (a) : (b))

int (min)(int, int) {
        return 666;
}

int main() {
        printf("%d\n", (min)(364345345, 353373773)); // 666
}
anonymous
()
Ответ на: комментарий от quiet_readonly

вместо min написать (min)

Еще можно _min, _min_, min_, my_min и т.д. Вообще идиотизм какой-то. Что фантазии нехватает? Надо все одним словом назвать?

anonymous
()
Ответ на: комментарий от anonymous

Что фантазии нехватает?

Похоже, что фантазии не хватает у тебя чтобы понять когда эта проблема может вылезать.

DarkEld3r ★★★★★
()
Ответ на: комментарий от DarkEld3r

Похоже, что фантазии не хватает у тебя чтобы понять когда эта проблема может вылезать.

И когда? Реально никогда не сталкивался с таким.

anonymous
()
Ответ на: комментарий от anonymous

И когда? Реально никогда не сталкивался с таким.

И функция и макрос могут оказаться библиотечными. Да, определять такие макросы не очень предусмотрительно, но такое случается (например, у майкрософт).

Например: https://stackoverflow.com/questions/13416418/define-nominmax-using-stdmin-max

Да, к счастью, они догадались добавить костыль в виде NOMINMAX, но ситуации когда приходится прибегать к скобкам могут случаться.

DarkEld3r ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.