fun*_*lic 10 c++ compiler-warnings
我收到以下警告:
warning: converting from 'void (MyClass::*)(byte)' to 'void (*)(byte)'
Run Code Online (Sandbox Code Playgroud)
这是因为我需要将成员函数而不是普通函数作为参数传递.但程序运行正常.
我想禁用此警告(Wno-bad-function-cast不适用于C++)或实现传递成员函数的不同方法.
iam*_*ind 16
不.严肃对待此警告.您应该更改代码以处理此方案.
成员函数(void (MyClass::*)(byte))和普通函数指针(void (*)(byte))的指针完全不同.看到这个链接.你不能像那样抛弃它们.它会导致未定义的行为或崩溃.
看到这里,他们是如何不同的:
void foo (byte); // normal function
struct MyClass {
void foo (byte); // member function
}
Run Code Online (Sandbox Code Playgroud)
现在您可能会感觉到foo(byte)并且MyClass::foo(byte)具有相同的签名,那么为什么它们的函数指针不相同.这是因为,MyClass::foo(byte)在某种程度上内部解决了,
void foo(MyClass* const this, byte);
Run Code Online (Sandbox Code Playgroud)
现在你可以闻到它们之间的区别.
声明指向成员函数的指针为,
void (MyClass::*ptr)(byte) = &MyClass::foo;
Run Code Online (Sandbox Code Playgroud)
你必须将它ptr与对象一起使用MyClass,例如:
MyClass obj;
obj.*ptr('a');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1241 次 |
| 最近记录: |