SAssignNew返回值和childSlot重载运算符

问题复现

在写编辑器的过程中写了这样一段

ChildSlot
	[
		SNew(STreeView<TSharedPtr<BTEditorFactor::CStateTreeState>>)
		.OnSelectionChanged_Lambda([ = ](TSharedPtr<BTEditorFactor::CStateTreeState> Selection, ESelectInfo::Type SelectInfo){
			if (SelectInfo == ESelectInfo::Type::OnMouseClick)
			{
				ContentManager::Getslef()->SetCurrentState(Selection);
			}
		})
		.HeaderRow(HeaderRowWidget)
		.TreeItemsSource(&ContentManager::Getslef()->m_nodeList)
		.OnGetChildren(this,&CNodeWidget::GetChildren)
		.OnGenerateRow(this,&CNodeWidget::GenerateRow)
		.OnContextMenuOpening(this,&CNodeWidget::ContextMenuOpening)
	];

这段是参考了UE中StateTree的用法。但是在我没有查看ChildSlot的传入参数时,我想获取Snew,于是我使用了一个SharePtr去接。但是报了错,


ChildSlot
	[
		TSharedPtr<STreeView<TSharedPtr<BTEditorFactor::CStateTreeState>>> m_nodeTreeView = SNew(STreeView<TSharedPtr<BTEditorFactor::CStateTreeState>>) //这里进行了shareRef->sharePtr的隐式转换
	]

我在想应该是不能ChildSlot不能使用PTR,但是各个帖子中都提到,说SAssignNew返回了一个指针那为什么可以写成

ChildSlot
	[
		SAssignNew(STreeView<TSharedPtr<BTEditorFactor::CStateTreeState>>)
	]

在这里插入图片描述

结论

事实上这里描述是不够准确的。
个人觉得应该描述为宏SAssignNew依旧返回了一个引用,但是通过函数参数来进行返回值,返回一个指针。

分析过程

首先查看ChildSlot的重载运算符,发现传入参数为Ref在这里插入图片描述
那SAssignNew是怎么传入的呢,它的返回值到底是什么?
在这里插入图片描述
在这里插入图片描述
好嘛,SAssignNew返回的还是个引用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值