gpt4 book ai didi

c++ - 通过 char[] 将对象指针传递给回调

转载 作者:太空宇宙 更新时间:2023-11-04 12:42:52 25 4
gpt4 key购买 nike

我有这个函数回调,它接收类型为 T 的参数。T 有一个成员函数 GetData(),定义如下,它返回要在回调中使用的数据:

void Callback(T* t) {
int64_t val;
auto data = t->GetData();
memcpy(&val, data, 8);
std::cout << "Value: " << val;
}

// Member of a class T:
char mData[64];

// Member functions of T
const char* GetData() const { return mData; }

void SetData(void* data, uint8_t size) {
if (size > 0) {
memcpy(mData, data, size);
}
}

以上工作正常。但是,出于某种原因,我似乎无法在数据组件中传递类的“this”指针。这就是将数据复制到 mData 成员的方式。

// This works
char data[64];
int64_t val = 42;
memcpy(&data, &val, 8);
t->SetData(data, 8);

// For storing 'this', I tried variations of the below.
char data[64];
memcpy(&data, this, 8);
t->SetData(data, 8);
// t->SetData(this, 8);

当我尝试将“this”存储在数据中,然后尝试在回调中取回它时,我似乎无法正确获取 this 指针的值。我尝试了以下变体,包括 reinterpret_cast 和其他。

void Callback(T* t) {
TypeOfThis* self;
auto data = t->GetData();
memcpy(&self, data, 8);
// self has bogus values.
}

在上述情况下,如何正确传递“this”指针?

最佳答案

首先“this”是在一个类中使用的。第二:“this”地址不一定指向类的第一个数据成员,因为有一些管理数据受制于编译器实现,换句话说,“this”和它的第一个数据成员之间可能有几个字节的差距。

关于c++ - 通过 char[] 将对象指针传递给回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53273932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com