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

时间:2018-11-13 04:41:18

标签: c++

我有一个函数回调函数,它接收类型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”指针?

1 个答案:

答案 0 :(得分:0)

首先,“ this”将在一个类中使用。第二:“ this”地址不一定指向类的第一个数据成员,因为有一些管理数据需要编译器实现,换句话说,“ this”与其第一个数据成员之间可能有几个字节的间隙。