这纯粹是一个理论问题,我知道如果有人将方法声明为私有,您可能不应该调用它。我设法调用私有虚拟方法并更改实例的私有成员,但我不知道如何调用私有非虚拟方法(不使用 __asm
)。有没有办法获得指向方法的指针?还有其他方法吗?
编辑:我不想更改类定义!我只想要一个黑客/解决方法。 :)
原文由 Luchian Grigore 发布,翻译遵循 CC BY-SA 4.0 许可协议
这纯粹是一个理论问题,我知道如果有人将方法声明为私有,您可能不应该调用它。我设法调用私有虚拟方法并更改实例的私有成员,但我不知道如何调用私有非虚拟方法(不使用 __asm
)。有没有办法获得指向方法的指针?还有其他方法吗?
编辑:我不想更改类定义!我只想要一个黑客/解决方法。 :)
原文由 Luchian Grigore 发布,翻译遵循 CC BY-SA 4.0 许可协议
调用私有方法的最简单方法(基于以前的答案,但更简单一些):
// Your class
class sample_class{
void private_method(){
std::cout << "Private method called" << std::endl;
}
};
// declare method's type
template<typename TClass>
using method_t = void (TClass::*)();
// helper structure to inject call() code
template<typename TClass, method_t<TClass> func>
struct caller{
friend void call(){
TClass obj;
(obj.*func)();
}
};
// even instantiation of the helper
template struct caller<sample_class,&sample_class::private_method>;
// declare caller
void call();
int main(){
call(); // and call!
return 0;
}
原文由 Gleb Bezborodov 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答1.3k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
4 回答867 阅读
1 回答937 阅读
1 回答973 阅读
1 回答736 阅读
1 回答839 阅读
#include
头文件,但是:显然,您需要绕过各种包含保护等,并在一个独立的编译单元中执行此操作。
编辑:仍然是hackish,但不那么: