Портирование C ++ - кода из Windows в Unix: системные вызовы сталкиваются с именами функций - PullRequest
1 голос
/ 24 марта 2010

Я портирую немного неуклюжий Windows-код C ++ на Linux, который использует функции, называемые «open» и «close» внутри каждого класса ... Очень плохой стиль, или? К счастью, это не было проблемой в Windows, поскольку их системные вызовы называются по-разному.

Когда я пытаюсь вызвать системные вызовы open () или close (), я получаю некоторую ошибку компилятора о том, что «нет подходящей функции для вызова класса: open ()». Я не могу переименовать все наши функции с именами «class :: open» и «class :: close» во всем коде, и мне приходится использовать open () и close (), так как я работаю с последовательными портами.

Итак, мой вопрос: как я могу сказать компилятору, какое открытие я имею в виду? Как я могу избежать или скрыть пространство имен класса в C ++?

Ответы [ 3 ]

7 голосов
/ 24 марта 2010

Вы можете использовать ::open для ссылки на open в глобальном пространстве имен.

1 голос
/ 24 марта 2010

Вызов :: open () вызовет глобальную функцию - то есть системный вызов.

1 голос
/ 24 марта 2010

Вы можете использовать оператор разрешения области, чтобы указать глобальные варианты ::open и ::close.

...