如何在宏中获取智能指针的类型?

阿特姆·塞利瓦诺夫

这行太长了:

btnNickname = TWeakObjectPtr<UButton>(Cast<UButton>(WidgetTree->FindWidget(FName(STRINGIFY(btnNickname))));

对于定义为的变量:

TWeakObjectPtr<UButton> btnNickname;

我想创建宏以减少代码:

FIND_WIDGET(btnNickname);

有什么办法吗?

我现在使用此代码:

#define FIND_WIDGET(TYPE, NAME) NAME = TWeakObjectPtr<TYPE>(Cast<TYPE>(WidgetTree->FindWidget(FName(STRINGIFY(NAME)))))

但是宏有两个参数。我可以从TWeakObjectPtr变量中获取指针类型吗?decltype可以给我类型的变量,而不是指针类型的数据。

物质:

#define FIND_WIDGET(NAME) NAME = TWeakObjectPtr<decltype(*NAME)>(Cast<decltype(*NAME)>(WidgetTree->FindWidget(FName(STRINGIFY(NAME)))))

但这是行不通的。

PSTWeakObjectPtr是虚幻引擎4中使用的智能指针。

乔纳森·韦克利(Jonathan Wakely)

我希望它不起作用的原因decltype(*NAME)是引用类型,因此您需要删除引用:

std::remove_reference_t<decltype(*NAME)>

或者您可以执行以下操作:

std::remove_pointer_t<decltype(NAME.operator->())>

但是无论如何,您都不应该使用宏。宏会闻到气味,父母会指向您,并告诉他们的孩子不要靠近使用宏的坏人。编写C ++,而不是宏。

编译器可以轻松推断出对象的类型:

template<typename T>
  inline void
  find_widget(TWeakObjectPtr<T>& t, const char* name)
  {
    t = TWeakObjectPtr<T>(Cast<T>(WidgetTree->FindWidget(FName(name))));
  }

进而:

find_widget(foo, STRINGIFY(foo));

这更加灵活,因为您还可以执行以下操作:

find_widget(foo, "something else");

NBfind_widget对于修改其论点的东西来说似乎不是一个很好的名字。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Lambda中捕获智能指针?

来自分类Dev

获取智能指针的指针

来自分类Dev

如何检查类型是智能指针还是对智能指针的引用

来自分类Dev

如何通过智能指针和子类应用类型检查

来自分类Dev

智能指针的效率如何?

来自分类Dev

如何从“ this”创建智能指针?

来自分类Dev

->在智能指针中的用法

来自分类Dev

功能中的智能指针

来自分类Dev

指向智能指针托管阵列中的智能指针

来自分类Dev

如何在某些智能指针中实现深度复制功能?

来自分类Dev

如何在C ++智能指针中放置线程?

来自分类Dev

如何在Allegro位图上使用智能指针?

来自分类Dev

如何开始编写智能指针?

来自分类Dev

智能指针的反递减如何工作?

来自分类Dev

智能指针如何影响5的规则?

来自分类Dev

智能指针的反递减如何工作?

来自分类Dev

Boost :: Python中的智能指针转换

来自分类Dev

模板参数中的C ++智能指针

来自分类Dev

C ++中智能指针的悬挂参考

来自分类Dev

Boost :: Python中的智能指针转换

来自分类Dev

构造函数中的智能指针

来自分类Dev

释放智能指针中的内存

来自分类Dev

C ++中的智能指针和映射

来自分类Dev

功能参数中的Qt智能指针

来自分类Dev

C++中的智能指针删除

来自分类Dev

获取指向智能指针指向的对象的指针-Ivalue错误

来自分类Dev

获取指向智能指针指向的对象的指针-Ivalue错误

来自分类Dev

如何移动到智能指针数组中的下一个指针

来自分类Dev

C ++如何将智能指针传递到将修改指针的输出参数中