这里有一些示例类来重现我面临的情况:
class A {
B* seccond;
}
class B {
int * number;
}
static NTSTATUS Read(std::uintptr_t address, size_t size, PVOID buff);
// Let's assume we have object 'obj' which has valid address of number variable
int buff;
Read(obj.seccond, sizeof(int), &buff);
Error: cannot convert argument 1 from 'int *' to 'uintptr_t'
我知道它可以很容易地修复:
Read(std::uintptr_t(obj.seccond), sizeof(int), &buff);
但这还不够令人满意,因为它降低了代码的可读性并且很丑陋。我真的不想使用模板,因为它们已经在我的代码中随处可见。 这些变量是否有任何简单的容器?或者更优雅的方式?
编辑:我已经重新调整了问题,抱歉
最佳答案
您可以使用重载在一个地方进行转换
static NTSTATUS Read(const void* p, size_t size, PVOID buff)
{
return Read(std::uintptr_t(p), size, buff);
}
关于C++ 任何指针作为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41485121/