Преобразовать в пустоту * - PullRequest
5 голосов
/ 30 июня 2011

как я могу преобразовать любой объект моего собственного класса, преобразованный в указатель на void?

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

Ответы [ 5 ]

11 голосов
/ 30 июня 2011
MyClass obj;
void *p;

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

Но будьте осторожны! obj выделяется в стеке таким образом, как только вы выходите из функции, указатель становится недействительным.

Редактировать : Обновлено, чтобы показать, что в этом случае явное приведение не требуется, поскольку каждый указатель совместим с указателем void.

5 голосов
/ 30 июня 2011

Вы не можете преобразовать не указатель в void*. Вам необходимо преобразовать указатель на ваш объект в void*

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

что преобразование неявное

void* p = &obj; //OK
5 голосов
/ 30 июня 2011

Если вы используете адрес, вы можете преобразовать его в указатель void.

MyClass obj;
void *ptr = (void*)&obj; // Success!
1 голос
/ 30 июня 2011

Я полагаю, что вы можете конвертировать только указатель на объект в указатель на void ???

Возможно: (void*)(&obj)

1 голос
/ 30 июня 2011

Чтобы сделать что-то, что может иметь какое-либо значение, сначала вы должны взять адрес объекта, получив значение указателя; затем наведите указатель.

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