我有一个函数回调函数,它接收类型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”指针?
答案 0 :(得分:0)
首先,“ this”将在一个类中使用。第二:“ this”地址不一定指向类的第一个数据成员,因为有一些管理数据需要编译器实现,换句话说,“ this”与其第一个数据成员之间可能有几个字节的间隙。