调用成员C++函数,但C函数具有相同的名称

call member C++ function but C function has same name

本文关键字:函数 C++ 成员 调用      更新时间:2023-10-16

我正在使用带有的C库

#define read _io_read

但我有一个C++类,它继承了一个成员函数"read"。我正试图从另一个成员函数调用该成员函数,但是编译器认为我试图在全局范围内调用C函数。

我尝试了以下

//header
    namespace myNameSpace{
      class B : public A{
       int read();
       int do_read();
    } 
    }
//cpp
using namespace myNameSpace;
int B::read(){
//other code needed 
_io_read();
}
int B::do_read(){
 this.read(); // here is where compiler resolves to _io_read
}

这附近有人吗?我宁愿不重命名基类A的read函数,因为我不能更改非我的代码。

TIA

您可以使用:

int B::do_read(){
 #undef read
 this.read(); // here is where compiler resolves to _io_read
 #define read _io_read
}

我会修改答案说:在你的模块中,你可以将所有有问题的#定义重新定义为不那么模糊的东西。例如,如果#定义的C例程来自libquux,则可以编辑quux.h来重新定义它们:

/*#define read _io_read*/
#define quux_read _io_read

遗憾的是,使用普通CPP并没有更好的宏观能力。

我将其放在.cpp文件的开头,并将删除不再需要的名称空间。很抱歉将#define描述为一个全局范围,仍在学习正确的命名法:)

#ifdef read
#undef read
#endif
int B::read(){
//other code needed 
_io_read(); //call C function directly
}
int B::do_read(){
 this.read(); //no more problem here
}