Вот некоторые примеры классов, чтобы воспроизвести ситуацию, я столкнулся:C++ Любой указатель в качестве аргумента функции
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);
, но это не удовлетворяющий достаточно, так как он снижает читаемость кода, и это просто уродливо. Я действительно не хочу использовать шаблоны, поскольку они уже повсюду по всему моему коду. Существует ли какой-либо простой контейнер для таких переменных? Или еще более элегантный способ сделать это?
EDIT: Я вновь адаптированный вопрос, извините
'std :: uintptr_t' не является типом указателя, это целое число. Неявное преобразование вызовет множество проблем (посмотрите примеры C для истории). – molbdnilo
* Шаблоны уже повсюду по всему вашему коду * ... Сделайте еще один :) –
Я знаю, но дело в том, что я работаю над другим пространством адресов процесса, в структурах которого содержатся указатели, как только я их прочитаю, их следует рассматривать как нормальные uint, которые должны быть переданы в функцию «Чтение». Значит, нет способа сделать это? –