c++ - b2Body::SetUserData 是否已弃用
问题描述
我正在设置一个 box2d 主体,使用一些旧代码作为参考,在我的旧代码中,我在设置主体的末尾有这一行
body->SetUserData(this);
如果我查看 box2d 源代码,我可以找到这个函数
inline void b2Body::SetUserData(void* data)
{
m_userData = data;
}
但是,当我尝试在我的新项目中设置此用户数据(可能使用更新版本的 box2d)时,该功能不存在。
该功能是否已弃用?还是我以某种方式设法删除了应该存在的功能?
解决方案
经过进一步调查,我发现该功能已被弃用,因为用户数据的设置已更改为具有包装结构。
旧的设置如下:
class b2Body
{
public:
/// Get the user data pointer that was provided in the body definition.
void* GetUserData() const;
/// Set the user data. Use this to store your application specific data.
void SetUserData(void* data);
private:
void* m_userData;
};
inline void b2Body::SetUserData(void* data)
{
m_userData = data;
}
inline void* b2Body::GetUserData() const
{
return m_userData;
}
但是,现在已更改为:
class B2_API b2Body
{
public:
/// Get the user data pointer that was provided in the body definition.
b2BodyUserData& GetUserData();
private:
b2BodyUserData m_userData;
};
inline b2BodyUserData& b2Body::GetUserData()
{
return m_userData;
}
该结构b2BodyUserData
定义为
struct B2_API b2BodyUserData
{
b2BodyUserData()
{
pointer = 0;
}
/// For legacy compatibility
uintptr_t pointer;
};
所以设置用户数据的方法不再需要SetUserData()
返回GetUserData()
一个non-const
可以修改的结构体的引用来提供相同的功能。
推荐阅读
- vba - 将一列乘以另一列,但前提是它们被突出显示
- python - 单击时如何销毁循环中的特定按钮?
- kotlin - 将其他电子邮件设置为收件人时,Gmail API 返回“my.email@email.com 的委托被拒绝”
- javascript - 我如何使用简单数据表在每页显示默认的 100 个条目?
- python - 每次重启时自动在 Databricks 集群上安装 pyodbc
- c# - “在 App.Config 中找不到连接字符串‘RgaAppDBEntities’”阻止我添加 WinForm 用户控件
- vue.js - 如何在 Vue 3 中包装 html 组件以使用相同的事件处理程序?
- javascript - React - 模块解析失败:意外令牌 (5:10)
- javascript - 如何在 javascript 循环中触发两次或三次点击
- jenkins - Jenkins SSH 流水线步骤——com.jcraft.jsch.JSchException:无效的私钥:[B@84d6b5c