Я изменяю базу кода, чтобы получить структуру (TheClipInfo) из лямбды, чтобы я мог вернуть одно из ее свойств (CurrentFrameCount).
Я думаю, что передаю его по ссылке, но явно что-то упускаю.
Комментарии ниже показывают, где я изменил код.
int32 UTimeSynthComponent::StopClipOffset(FTimeSynthClipHandle InClipHandle, ETimeSynthEventClipQuantization EventQuantization)
{
Audio::EEventQuantization StopQuantization = GlobalQuantization;
if (EventQuantization != ETimeSynthEventClipQuantization::Global)
{
int32 ClipQuantizationEnumIndex = (int32)EventQuantization;
check(ClipQuantizationEnumIndex >= 1);
StopQuantization = (Audio::EEventQuantization)(ClipQuantizationEnumIndex - 1);
}
FPlayingClipInfo TheClipInfo; // I want the Lambda to put data here.
SynthCommand([this, InClipHandle, StopQuantization, &TheClipInfo] // The first Lambda
{
EventQuantizer.EnqueueEvent(StopQuantization,
[this, InClipHandle, &TheClipInfo](uint32 NumFramesOffset) // The Second Lambda
{
int32* PlayingClipIndex = ClipIdToClipIndexMap_AudioRenderThread.Find(InClipHandle.ClipId);
if (PlayingClipIndex)
{
// Grab the clip info
FPlayingClipInfo& PlayingClipInfo = PlayingClipsPool_AudioRenderThread[*PlayingClipIndex]; // The Struct I want to get out.
// Only do anything if the clip is not yet already fading
if (PlayingClipInfo.CurrentFrameCount < PlayingClipInfo.DurationFrames)
{
// Adjust the duration of the clip to "spoof" it's code which triggers a fade this render callback block.
PlayingClipInfo.DurationFrames = PlayingClipInfo.CurrentFrameCount + NumFramesOffset;
}
TheClipInfo = PlayingClipInfo; // I think this should make a copy.
}
});
});
return TheClipInfo.CurrentFrameCount; // This is always returning 0.
}
I ' м, если предположить, что все это происходит в одном и том же потоке и по порядку (не некоторый асинхронный c обратный вызов, такой как JavaScript).
Моя первая попытка была с int32, но она не может быть передана по ссылке , Я действительно хочу получить только одно значение.