gpt4 book ai didi

c++ - 在 C++ 中调用私有(private)方法

转载 作者:IT老高 更新时间:2023-10-28 22:10:12 26 4
gpt4 key购买 nike

这纯粹是一个理论问题,我知道如果有人将方法声明为私有(private),您可能不应该调用它。我设法调用私有(private)虚拟方法并更改实例的私有(private)成员,但我不知道如何调用私有(private)非虚拟方法(不使用 __asm)。有没有办法获得指向方法的指针?还有其他方法吗?

编辑:我不想更改类定义!我只想要一个黑客/解决方法。 :)

最佳答案

my blog post .我在这里重新发布代码

template<typename Tag>
struct result {
/* export it ... */
typedef typename Tag::type type;
static type ptr;
};

template<typename Tag>
typename result<Tag>::type result<Tag>::ptr;

template<typename Tag, typename Tag::type p>
struct rob : result<Tag> {
/* fill it ... */
struct filler {
filler() { result<Tag>::ptr = p; }
};
static filler filler_obj;
};

template<typename Tag, typename Tag::type p>
typename rob<Tag, p>::filler rob<Tag, p>::filler_obj;

一些有私有(private)成员的类

struct A {
private:
void f() {
std::cout << "proof!" << std::endl;
}
};

以及如何访问它们

struct Af { typedef void(A::*type)(); };
template class rob<Af, &A::f>;

int main() {
A a;
(a.*result<Af>::ptr)();
}

关于c++ - 在 C++ 中调用私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6873138/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com