Size: a a a

2019 January 25

AS

Alexander Shumeyko in Unreal Engine
Jokhar Ali
А передать как указатель не получается?
>> void FToolBarBuilder::AddToolBarButton(const FUIAction& InAction, FName InExtensionHook ...
Он там не примет указатель
источник

AS

Alexander Shumeyko in Unreal Engine
Ошибка была оправдана, если бы функция принимала какой-то объект с explicit конструктором, а тут фиг знает)
источник

AR

Alexey Rodionov in Unreal Engine
"Builder.AddToolBarButton"

это из лямбды вызывается же?
источник

JA

Jokhar Ali in Unreal Engine
Покаж больше кода :D
источник

VB

Vladimir Baranov in Unreal Engine
this в лямбде нету?
источник

AR

Alexey Rodionov in Unreal Engine
[ButtonAction](...){...} вот так надо скорее всего
источник

VB

Vladimir Baranov in Unreal Engine
а, ну да, ButtonAction
источник

VB

Vladimir Baranov in Unreal Engine
или таки this, как повезёт
источник

JA

Jokhar Ali in Unreal Engine
Alexey Sarapulov
Создал FUIAction:
FUIAction ButtonAction = FUIAction(FExecuteAction::CreateRaw(this, &SomeClass::SomeAction));
И затем пытаюсь передать его как параметр, например:
Builder.AddToolBarButton(ButtonAction, NAME_None, FText::FromString("Title"),
     FText::FromString("Tooltip"),
     Icon, EUserInterfaceActionType::ToggleButton);
И получаю такую ошибку: "'ButtonAction' cannot be implicitly captured because no default capture mode has been specified
"
Гугл подсказывает, что надо определить окружение для лямбды, но у меня нет никакой лямбды. Что не так?
Ты ж говорил что никакой лямбды нет
источник

AS

Alexey Sarapulov in Unreal Engine
Jokhar Ali
Покаж больше кода :D
// Create command for button
PluginCommands = MakeShareable(new FUICommandList);
PluginCommands->MapAction(
 FSomeButton::Get().SomeCommand,
 FExecuteAction::CreateRaw(this, &FThisModule::TakeOneParameterAndDoSomething, SomeParameter),
 FCanExecuteAction());

NewToolbarExtender = MakeShareable(new FExtender);
const FUIAction* ButtonAction = PluginCommands->GetActionForCommand(FSomeButton::Get().SomeCommand);

NewToolbarExtender->AddToolBarExtension("Realtime", EExtensionHook::Before, PluginCommands, FToolBarExtensionDelegate::CreateLambda([&](FToolBarBuilder& Builder)

Builder.AddToolBarButton(&ButtonAction, NAME_None, FText::FromString("Title"), FText::FromString("Tooltip"), Icon, EUserInterfaceActionType::ToggleButton);
источник

AS

Alexey Sarapulov in Unreal Engine
Jokhar Ali
Ты ж говорил что никакой лямбды нет
CreateRaw - технически создает лямбду?
источник

JA

Jokhar Ali in Unreal Engine
Alexey Sarapulov
CreateRaw - технически создает лямбду?
Нет
источник

JA

Jokhar Ali in Unreal Engine
Alexey Sarapulov
// Create command for button
PluginCommands = MakeShareable(new FUICommandList);
PluginCommands->MapAction(
 FSomeButton::Get().SomeCommand,
 FExecuteAction::CreateRaw(this, &FThisModule::TakeOneParameterAndDoSomething, SomeParameter),
 FCanExecuteAction());

NewToolbarExtender = MakeShareable(new FExtender);
const FUIAction* ButtonAction = PluginCommands->GetActionForCommand(FSomeButton::Get().SomeCommand);

NewToolbarExtender->AddToolBarExtension("Realtime", EExtensionHook::Before, PluginCommands, FToolBarExtensionDelegate::CreateLambda([&](FToolBarBuilder& Builder)

Builder.AddToolBarButton(&ButtonAction, NAME_None, FText::FromString("Title"), FText::FromString("Tooltip"), Icon, EUserInterfaceActionType::ToggleButton);
Вон же у тебя лямбда
источник

JA

Jokhar Ali in Unreal Engine
[&]
источник

AS

Alexey Sarapulov in Unreal Engine
Jokhar Ali
Вон же у тебя лямбда
Когда я писал вопрос, я считал, что она не должна иметь к этому никакого отношения (и до сих пор считаю), но если поменять & на this, например, то ошибка меняется, это правда
источник

AS

Alexey Sarapulov in Unreal Engine
Да только и так, и так разгрести не могу
источник

JA

Jokhar Ali in Unreal Engine
Alexey Sarapulov
Да только и так, и так разгрести не могу
[&ButtonAction, &Icon] попробуй
источник

AS

Alexey Sarapulov in Unreal Engine
Jokhar Ali
[&ButtonAction, &Icon] попробуй
это где?
источник

AR

Alexey Rodionov in Unreal Engine
Jokhar Ali
[&ButtonAction, &Icon] попробуй
а вот это может быть рискованно. захватывать по ссылке переменную на стеке
источник

JA

Jokhar Ali in Unreal Engine
Кстати
источник