Hier sind einige Beispiele für Klassen, die Situation zu reproduzieren Ich bin vor:C++ Alle Zeiger als Funktionsargument
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'
Ich weiß, es leicht mit behoben werden kann:
Read(std::uintptr_t(obj.seccond), sizeof(int), &buff);
aber dies ist nicht befriedigend genug, da es die Lesbarkeit des Codes senkt und es nur hässlich ist. Ich möchte wirklich keine Vorlagen verwenden, da sie überall in meinem Code bereits vorhanden sind. Gibt es einen einfachen Container für solche Variablen? Oder eine elegantere Art, es zu tun?
EDIT: Ich habe Frage neu angepasst, sorry
'std :: uintptr_t' ist kein Zeigertyp, sondern eine Ganzzahl. Implizite Konvertierung würde viele Probleme verursachen (schauen Sie sich die Geschichte von C für Beispiele an). – molbdnilo
* Vorlagen sind schon überall überall in Ihrem Code * ... Machen Sie einen mehr :) –
Ich weiß, aber der Fall ist, ich arbeite an anderen Prozess Adressraum, die Strukturen hält Zeiger, sobald ich sie gelesen habe, sollten sie als normal behandelt werden Uint-Werte, die an die Read-Funktion übergeben werden sollen. Also gibt es keine Möglichkeit, das zu tun? –