【问题标题】:Convert into void*转换为无效*
【发布时间】:2011-06-30 11:47:22
【问题描述】:

如何将我自己类的任何对象转换为指向 void 的指针?

MyClass obj;
(void*)obj; // Fail

【问题讨论】:

  • 你不能。你想做什么?
  • @bo-persson 我有一个结构,可以通过传递void* 数据在其中存储附加信息。
  • 你写的或继承的?如果以前 - 为什么-o-为什么?
  • @nim 这个结构来自自己的库,我无法修改。

标签: c++ pointers casting void


【解决方案1】:
MyClass obj;
void *p;

p = (void*)&obj; // Explicit cast.
// or:
p = &obj; // Implicit cast, as every pointer is compatible with void *

但要小心! obj 是这样分配在栈上的,一旦你离开函数,指针就会失效。

编辑:更新以表明在这种情况下不需要显式转换,因为每个指针都与 void 指针兼容。

【讨论】:

  • 那么,为什么每个人都明确强制转换为 void*?
  • 我可以用shared_ptr来控制生活吗?
  • @Cwan:反射。当我做一些演员时,我几乎总是明确地做。已更新我的答案。
  • @DarkDust:不是 每个 指针都“兼容”(您的意思是,隐式可转换)到 void*。例如,如果没有const_cast,则无法将const char* 转换为void*
  • 术语:强制转换是一种显式转换。隐式转换不是强制转换。
【解决方案2】:

您不能将非指针转换为void*。您需要将指向您的对象的指针转换为void*

(void*)(&obj); //no need to cast explicitly.

转换是隐式的

void* p = &obj; //OK

【讨论】:

    【解决方案3】:

    如果使用地址,可以将其转换为void指针。

    MyClass obj;
    void *ptr = (void*)&obj; // Success!
    

    【讨论】:

      【解决方案4】:

      要做一些有意义的事情,首先你必须获取一个对象的地址,获得一个指针值;然后投射指针。

      MyClass obj;
      MyClass * pObj = &obj;
      void * pVoidObj = (void*)pObj;
      

      【讨论】:

        【解决方案5】:

        我相信你只能将指向对象的指针转换为指向 void 的指针???

        也许:(void*)(&obj)

        【讨论】:

          猜你喜欢
          • 2016-07-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-20
          • 2022-06-10
          • 1970-01-01
          • 2011-06-13
          相关资源
          最近更新 更多