将 C++ 代码从 Windows 移植到 Unix:系统调用与函数名称冲突
我正在将一些粗糙的 C++ Windows 代码移植到 Linux,它在每个类中使用称为“open”和“close”的函数......非常糟糕的风格,或者?幸运的是,这在 Windows 中不是问题,因为它们的系统调用命名不同。
当我尝试调用系统调用 open() 或 close() 时,我收到一些有关“没有匹配的类调用函数:open()”的编译器错误。我无法在整个代码中重命名所有名为“class::open”和“class::close”的函数,并且由于我正在使用串行端口,所以我必须使用 open() 和 close() 。
所以我的问题是:我如何告诉编译器,我指的是哪个打开?如何转义或隐藏 C++ 中类的名称空间?
I'm porting some crufty C++ Windows-code to Linux, which uses functions called "open" and "close" inside every class... Very bad style, or? Luckily that wasn't a problem in windows, since their systemcalls are named different.
When I try to call the systemcalls open() or close() I'm getting some compiler error about "no matching function for call for class:open()". I can't rename all our functions named "class::open" and "class::close" in the whole code, and I have to use open() and close() since I'm working with serial ports.
So my question is: How can I tell the compiler, which open I mean? How can I escape or hide the namespace of a class in C++?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用
::open
来引用全局命名空间中的open
。You can use
::open
to refer to theopen
in the global namespace.您可以使用范围解析运算符来指示全局变体
::open
和::close
。You can use the scope resolution operator to indicate the global variants
::open
and::close
.调用 ::open() 将调用全局函数 - 即系统调用。
Calling ::open() will call the global function - i.e. the system call.