ich eine einfache Wrapper-Klasse für Integer-Typen haben, wie so definiert:Verwenden einer Wrapper-Klasse als Zeiger auf den Wrapper-Typ?
class Integer {
public:
Integer() {
}
Integer(const int& value) {
this->value = value;
}
int toInt() const {
return value;
}
operator int() const {
return toInt();
}
private:
int value = 0;
};
Was ich möchte, zu tun ist, um die Klasse oben an eine Funktion, die eine Signatur wie folgt hat: doSomething(int* value)
Wenn ich einen normalen int verwenden waren, konnte ich einfach tun:
int value = 5;
doSomething(&value);
Wenn jedoch die Wrapper-Klasse verwendet, kann ich nicht da wäre es einen Zeiger auf die Klasse verwenden, anstelle der tatsächlichen zugrundeliegenden Wert. Ich kenne den Adressoperator , den ich verwenden könnte, um einen Zeiger auf den Wert zurückzugeben, aber es würde verhindern, dass ich einen Zeiger auf die Klasse selbst bekommen würde, wenn ich es brauchte.
Also idealerweise gäbe es einen Weg, der es mir erlauben würde, &myclass
zu verwenden, um einen Zeiger auf die Klasse oder den zugrunde liegenden Wert zu bekommen, je nachdem, was benötigt wird.
Gibt es so einen Weg?
Warum möchten Sie eine solche Klasse implementieren? Ist das ein [xy Problem] (http://xyproblem.info/)? – Xiobiq
Sie können '&' überladen, aber um die Adresse der Klasse zu erhalten, müssen Sie 'std :: addressof' verwenden. Das heißt, was Sie tun, ist gegen ein gutes Design. – Arunmu
@Polikdir Ich habe diese Klasse implementiert, so dass ich eine konstante Integer-Größe im Speicher plattformübergreifend erzwingen kann. – Qub1