调用成员 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
}
我正在使用 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
}