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;
}
};
UClass
ist abgeleitet vonUObject
Meine Klasse hat zwei Operatorüberladungen und ruft immer die UObject
Version auf, auch wenn ich den Operator für einen UClass
Zeiger 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 Archive
steht 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