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

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

我正在使用 C 库

#define read _io_read

但我有一个 C++ class,它继承了一个成员函数 '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
}

这附近有没有?我宁愿不重命名基础 class A 的读取函数,因为我无法更改不属于我的代码。

TIA

您可以使用:

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

我会将答案修改为:在您的 模块中,您可以将所有有问题的#defines 重新定义为不那么含糊的内容。例如,如果#defined 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
}