Hi there,
I’ve just encountered an issue with FDataTableRowHandle.GetRow<>().
When trying to get a row that derives from another row the reinterpret_cast fails, but only if no property is set on the row struct that we cast from.
To be more specific here is a test setup:
USTRUCT(BlueprintType)
struct FSomeBaseRow : public FTableRowBase
{
GENERATED_BODY();
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Impact")
UMaterial* defaultDecal;
};
USTRUCT(BlueprintType)
struct FSomeDerivedRow : public FSomeBaseRow
{
GENERATED_BODY();
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Impact")
USoundCue* defaultSound;
/** WORKAROUND! Adding this fake property fixes this issue */
uint8 someFakeProperty = 0;
};
Now when you have a FDataTableRowHandle that points to a FSomeDerivedRow it will only resolve the row when using GetRow<>() if:
a) Some asset is assigned to defaultSound. If it’s a nullptr the GetRow will fail.
b) someFakeProperty is added and initialized
If not using one of the workarounds the GetRow will fail on FindRow<>()
return reinterpret_cast<T*>(RowData);
Do you have any suggestions why this might be happening and how to fix it properly?
Regards,