本文整理汇总了C++中TOptional类的典型用法代码示例。如果您正苦于以下问题:C++ TOptional类的具体用法?C++ TOptional怎么用?C++ TOptional使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了TOptional类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetInteractionType
ETransformGizmoInteractionType ABaseTransformGizmo::GetInteractionType( UActorComponent* DraggedComponent, TOptional<FTransformGizmoHandlePlacement>& OutHandlePlacement )
{
OutHandlePlacement.Reset();
if ( DraggedComponent != nullptr )
{
UStaticMeshComponent* DraggedMesh = Cast<UStaticMeshComponent>( DraggedComponent );
if ( DraggedMesh != nullptr )
{
ETransformGizmoInteractionType ResultInteractionType;
for ( UGizmoHandleGroup* HandleGroup : AllHandleGroups )
{
if ( HandleGroup != nullptr )
{
int32 HandIndex = HandleGroup->GetDraggedHandleIndex( DraggedMesh );
if ( HandIndex != INDEX_NONE )
{
HandleGroup->GetHandleIndexInteractionType( HandIndex, ResultInteractionType, OutHandlePlacement );
return ResultInteractionType;
}
}
}
}
}
OutHandlePlacement.Reset();
return ETransformGizmoInteractionType::Translate;
}
示例2: OnCursorQuery
FCursorReply SWidget::OnCursorQuery( const FGeometry& MyGeometry, const FPointerEvent& CursorEvent ) const
{
TOptional<EMouseCursor::Type> TheCursor = Cursor.Get();
return ( TheCursor.IsSet() )
? FCursorReply::Cursor( TheCursor.GetValue() )
: FCursorReply::Unhandled();
}
示例3: ParseLiteral
TOptional<FExpressionError> ParseLiteral(FExpressionTokenConsumer& Consumer)
{
FTokenStream& Stream = Consumer.GetStream();
TOptional<FStringToken> Token;
{
bool bFirstChar = true;
Token = Stream.ParseToken([&](TCHAR C)
{
// Always include the first character, since if it was the start of a valid token then it would have been picked up by a higher priority token parser
if (bFirstChar)
{
bFirstChar = false;
return EParseState::Continue;
}
else if (!IsLiteralBreakChar(C))
{
return EParseState::Continue;
}
else
{
return EParseState::StopBefore;
}
});
}
if (Token.IsSet())
{
// Add the token to the consumer - this moves the read position in the stream to the end of the token
FStringToken& TokenValue = Token.GetValue();
Consumer.Add(TokenValue, FStringLiteral(TokenValue));
}
return TOptional<FExpressionError>();
}
示例4: IsValidAdditiveInternal
bool UBlendSpaceBase::IsValidAdditiveInternal(EAdditiveAnimationType AdditiveType) const
{
TOptional<bool> bIsAdditive;
for (int32 I=0; I<SampleData.Num(); ++I)
{
const UAnimSequence* Animation = SampleData[I].Animation;
// test animation to see if it matched additive type
bool bAdditiveAnim = ( Animation && Animation->IsValidAdditive() && Animation->AdditiveAnimType == AdditiveType );
// if already has value, but it does not match
if ( bIsAdditive.IsSet() )
{
// it's inconsistent, we ignore this
if (bIsAdditive.GetValue() != bAdditiveAnim)
{
return false;
}
}
else
{
bIsAdditive = TOptional<bool>(bAdditiveAnim);
}
}
return (bIsAdditive.IsSet() && bIsAdditive.GetValue());
}
示例5: ImportTextForTargets
bool LocalizationCommandletTasks::ImportTextForTargets(const TSharedRef<SWindow>& ParentWindow, const TArray<ULocalizationTarget*>& Targets, const TOptional<FString> DirectoryPath)
{
TArray<LocalizationCommandletExecution::FTask> Tasks;
for (ULocalizationTarget* Target : Targets)
{
const bool ShouldUseProjectFile = !Target->IsMemberOfEngineTargetSet();
FFormatNamedArguments Arguments;
Arguments.Add(TEXT("TargetName"), FText::FromString(Target->Settings.Name));
const FText ImportTaskName = FText::Format(LOCTEXT("ImportTaskNameFormat", "Import Translations for {TargetName}"), Arguments);
const FString ImportScriptPath = LocalizationConfigurationScript::GetImportTextConfigPath(Target, TOptional<FString>());
const TOptional<FString> DirectoryPathForTarget = DirectoryPath.IsSet() ? DirectoryPath.GetValue() / Target->Settings.Name : TOptional<FString>();
LocalizationConfigurationScript::GenerateImportTextConfigFile(Target, TOptional<FString>(), DirectoryPathForTarget).Write(ImportScriptPath);
Tasks.Add(LocalizationCommandletExecution::FTask(ImportTaskName, ImportScriptPath, ShouldUseProjectFile));
const FText ReportTaskName = FText::Format(LOCTEXT("ReportTaskNameFormat", "Generate Reports for {TargetName}"), Arguments);
const FString ReportScriptPath = LocalizationConfigurationScript::GetWordCountReportConfigPath(Target);
LocalizationConfigurationScript::GenerateWordCountReportConfigFile(Target).Write(ReportScriptPath);
Tasks.Add(LocalizationCommandletExecution::FTask(ReportTaskName, ReportScriptPath, ShouldUseProjectFile));
}
return LocalizationCommandletExecution::Execute(ParentWindow, LOCTEXT("ImportForAllTargetsWindowTitle", "Import Translations for All Targets"), Tasks);
}
示例6: ParseLiteral
/** Parse anything until we find an unescaped { */
TOptional<FExpressionError> ParseLiteral(FExpressionTokenConsumer& Consumer, bool bEmitErrors)
{
// Include a leading { character - if it was a valid argument token it would have been picked up by a previous token definition
bool bFirstChar = true;
TOptional<FStringToken> Token = Consumer.GetStream().ParseToken([&](TCHAR C){
if (C == '{' && !bFirstChar)
{
return EParseState::StopBefore;
}
else if (C == EscapeChar)
{
return EParseState::StopBefore;
}
else
{
bFirstChar = false;
// Keep consuming
return EParseState::Continue;
}
});
if (Token.IsSet())
{
// Add the token to the consumer. This moves the read position in the stream to the end of the token.
Consumer.Add(Token.GetValue(), FStringLiteral(Token.GetValue()));
}
return TOptional<FExpressionError>();
}
示例7: ExtractAssetImportInfo
void FAssetSourceFilenameCache::HandleOnAssetRenamed(const FAssetData& AssetData, const FString& OldPath)
{
TOptional<FAssetImportInfo> ImportData = ExtractAssetImportInfo(AssetData.TagsAndValues);
if (ImportData.IsSet())
{
FName OldPathName = *OldPath;
for (auto& SourceFile : ImportData->SourceFiles)
{
FString CleanFilename = FPaths::GetCleanFilename(SourceFile.RelativeFilename);
if (auto* Objects = SourceFileToObjectPathCache.Find(CleanFilename))
{
Objects->Remove(OldPathName);
if (Objects->Num() == 0)
{
SourceFileToObjectPathCache.Remove(CleanFilename);
}
}
SourceFileToObjectPathCache.FindOrAdd(CleanFilename).Add(AssetData.ObjectPath);
}
}
AssetRenamedEvent.Broadcast(AssetData, OldPath);
}
示例8: SetNav
void FWidgetNavigationCustomization::SetNav(UWidget* Widget, EUINavigation Nav, TOptional<EUINavigationRule> Rule, TOptional<FName> WidgetToFocus)
{
Widget->Modify();
UWidgetNavigation* WidgetNavigation = Widget->Navigation;
if (!Widget->Navigation)
{
WidgetNavigation = NewObject<UWidgetNavigation>(Widget);
}
FWidgetNavigationData* DirectionNavigation = nullptr;
switch ( Nav )
{
case EUINavigation::Left:
DirectionNavigation = &WidgetNavigation->Left;
break;
case EUINavigation::Right:
DirectionNavigation = &WidgetNavigation->Right;
break;
case EUINavigation::Up:
DirectionNavigation = &WidgetNavigation->Up;
break;
case EUINavigation::Down:
DirectionNavigation = &WidgetNavigation->Down;
break;
case EUINavigation::Next:
DirectionNavigation = &WidgetNavigation->Next;
break;
case EUINavigation::Previous:
DirectionNavigation = &WidgetNavigation->Previous;
break;
default:
// Should not be possible.
check(false);
return;
}
if ( Rule.IsSet() )
{
DirectionNavigation->Rule = Rule.GetValue();
}
if ( WidgetToFocus.IsSet() )
{
DirectionNavigation->WidgetToFocus = WidgetToFocus.GetValue();
}
if ( WidgetNavigation->IsDefault() )
{
// If the navigation rules are all set to the defaults, remove the navigation
// information from the widget.
Widget->Navigation = nullptr;
}
else
{
Widget->Navigation = WidgetNavigation;
}
}
示例9:
TOptional<FGuid> FActorReferencePropertySection::GetActorGuid() const
{
TOptional<AActor*> CurrentActor = GetPropertyValue<AActor*>();
if (CurrentActor.IsSet() && CurrentActor.GetValue() != nullptr)
{
return TOptional<FGuid>(GetSequencer()->GetFocusedMovieSceneSequenceInstance()->FindObjectId(*CurrentActor.GetValue()));
}
return TOptional<FGuid>(FGuid());
}
示例10: GenerateFileCacheConfig
/** Generate a config from the specified options, to pass to FFileCache on construction */
DirectoryWatcher::FFileCacheConfig GenerateFileCacheConfig(const FString& InPath, const DirectoryWatcher::FMatchRules& InMatchRules, const FString& InMountedContentPath)
{
FString Directory = FPaths::ConvertRelativePathToFull(InPath);
const FString& HashString = InMountedContentPath.IsEmpty() ? Directory : InMountedContentPath;
const uint32 CRC = FCrc::MemCrc32(*HashString, HashString.Len()*sizeof(TCHAR));
FString CacheFilename = FPaths::ConvertRelativePathToFull(FPaths::GameIntermediateDir()) / TEXT("ReimportCache") / FString::Printf(TEXT("%u.bin"), CRC);
DirectoryWatcher::FFileCacheConfig Config(Directory, MoveTemp(CacheFilename));
Config.Rules = InMatchRules;
// We always store paths inside content folders relative to the folder
Config.PathType = DirectoryWatcher::EPathType::Relative;
Config.bDetectChangesSinceLastRun = GetDefault<UEditorLoadingSavingSettings>()->bDetectChangesOnStartup;
// It's safe to assume the asset registry is not re-loadable
IAssetRegistry* Registry = &FModuleManager::LoadModuleChecked<FAssetRegistryModule>(AssetRegistryConstants::ModuleName).Get();
Config.CustomChangeLogic = [Directory, Registry](const DirectoryWatcher::FImmutableString& InRelativePath, const DirectoryWatcher::FFileData& FileData) -> TOptional<bool> {
int32 TotalNumReferencingAssets = 0;
TArray<FAssetData> Assets = FAssetSourceFilenameCache::Get().GetAssetsPertainingToFile(*Registry, Directory / InRelativePath.Get());
if (Assets.Num() == 0)
{
return TOptional<bool>();
}
// We need to consider this as a changed file if the hash doesn't match any asset imported from that file
for (FAssetData& Asset : Assets)
{
TOptional<FAssetImportInfo> Info = FAssetSourceFilenameCache::ExtractAssetImportInfo(Asset.TagsAndValues);
// Check if the source file that this asset last imported was the same as the one we're going to reimport.
// If it is, there's no reason to auto-reimport it
if (Info.IsSet() && Info->SourceFiles.Num() == 1)
{
if (Info->SourceFiles[0].FileHash != FileData.FileHash)
{
return true;
}
}
}
return TOptional<bool>();
};
// We only detect changes for when the file *contents* have changed (not its timestamp)
Config
.DetectMoves(true)
.DetectChangesFor(DirectoryWatcher::FFileCacheConfig::Timestamp, false)
.DetectChangesFor(DirectoryWatcher::FFileCacheConfig::FileHash, true);
return Config;
}
示例11: SetTimeRange
void FVisualLoggerTimeSliderController::SetTimeRange(float NewViewOutputMin, float NewViewOutputMax)
{
TimeSliderArgs.ViewRange.Set(TRange<float>(NewViewOutputMin, NewViewOutputMax));
TOptional<float> LocalClampMin = TimeSliderArgs.ClampMin.Get();
TOptional<float> LocalClampMax = TimeSliderArgs.ClampMax.Get();
const float InOffsetFraction = (NewViewOutputMin - LocalClampMin.GetValue()) / (LocalClampMax.GetValue() - LocalClampMin.GetValue());
const float InThumbSizeFraction = (NewViewOutputMax - NewViewOutputMin) / (LocalClampMax.GetValue() - LocalClampMin.GetValue());
Scrollbar->SetState(InOffsetFraction, InThumbSizeFraction);
}
示例12: Lex
LexResultType Lex(const TCHAR* InExpression, const FTokenDefinitions& TokenDefinitions)
{
FExpressionTokenConsumer TokenConsumer(InExpression);
TOptional<FExpressionError> Error = TokenDefinitions.ConsumeTokens(TokenConsumer);
if (Error.IsSet())
{
return MakeError(Error.GetValue());
}
return MakeValue(TokenConsumer.Extract());
}
示例13: ConsumeNumber
/** Consume a number from the specified consumer's stream, if one exists at the current read position */
TOptional<FExpressionError> ConsumeNumber(FExpressionTokenConsumer& Consumer)
{
auto& Stream = Consumer.GetStream();
TOptional<FStringToken> NumberToken = ExpressionParser::ParseNumber(Stream);
if (NumberToken.IsSet())
{
Consumer.Add(NumberToken.GetValue(), FExpressionNode(FTextToken(NumberToken.GetValue().GetString(), ETextFilterTextComparisonMode::Partial, FTextToken::EInvertResult::No)));
}
return TOptional<FExpressionError>();
}
示例14: GetAspectRatio
void FCameraDetails::UpdateAspectTextFromProperty()
{
// Called whenever the actual aspect ratio property changes - clears the text box if the value no longer matches the current text
TOptional<float> Value = GetAspectRatio();
if (!Value.IsSet() || Value.GetValue() < LastParsedAspectRatioValue - DELTA || Value.GetValue() > LastParsedAspectRatioValue + DELTA)
{
LastParsedAspectRatioValue = -1.0f;
if (!AspectTextBox->GetText().IsEmpty())
{
AspectTextBox->SetText(FText::GetEmpty());
}
}
}
示例15: QueryPopupMethod
EPopupMethod QueryPopupMethod(const FWidgetPath& PathToQuery)
{
for (int32 WidgetIndex = PathToQuery.Widgets.Num() - 1; WidgetIndex >= 0; --WidgetIndex)
{
TOptional<EPopupMethod> PopupMethod = PathToQuery.Widgets[WidgetIndex].Widget->OnQueryPopupMethod();
if (PopupMethod.IsSet())
{
return PopupMethod.GetValue();
}
}
return EPopupMethod::CreateNewWindow;
}