GOOGLE ADS

Dienstag, 26. April 2022

Überladung des C++-Operators, der den Parameter mit dem übergeordneten Typ aufruft, obwohl einer mit dem angegebenen Typ vorhanden ist


class FArchiveDerivedClass: public FArchive
{
public:
virtual FArchive& operator<<(UObject*& Object) override
{
Object->Serialize(*this);
return *this;
}
FArchive& operator<<(UClass*& Class)
{
if(Class!=nullptr)
{
FString FullClassPath = Class->GetPathName();
*this << FullClassPath;
}
return *this;
}
};

UClassist abgeleitet vonUObject

Meine Klasse hat zwei Operatorüberladungen und ruft immer die UObjectVersion auf, auch wenn ich den Operator für einen UClassZeiger aufrufe.

FArchiveDerivedClass DerivedArchive;
FArchive& Archive = DerivedArchive;
UClass* Class;
Archive << Class;

Wie rufe ich die richtige Version auf?


Lösung des Problems

Die Linie

Archive << Class;

ist das Problem.

In dieser Zeile Archivesteht FArchive&type, nicht FArchiveDerivedClass&. Um aufzurufen, müssen Sie eine Typvariable FArchiveDerivedClass::operator<<deklarieren, zum Beispiel:FArchiveDerivedClass&

FArchiveDerivedClass DerivedArchive;
FArchiveDerivedClass& Archive = DerivedArchive;
UClass* Class;
Archive << Class;

In diesem Beispiel ist die zweite Variable irrelevant, und Sie können direkt aufrufen DerivedArchive << Class, aber ich nehme an, Sie benötigen die Referenz möglicherweise für etwas.

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...