void*
От: Sergei  
Дата: 16.09.02 12:24
Оценка:
Как узнать на что указывает void*
Поможет ли static_cast<Тип*>(VoidPtr) и возвратит ли он корректное значение?
Re: void*
От: MaximE Великобритания  
Дата: 16.09.02 12:32
Оценка:
Здравствуйте Sergei, Вы писали:

S>Как узнать на что указывает void*


На void.

S>Поможет ли static_cast<Тип*>(VoidPtr) и возвратит ли он корректное значение?


static_cast<>() всегда возвращает корректное значение . В с++ нет оператора преобразования, который бы угадывал тип объекта, на который указыавет void*.
Re: void*
От: orangy Россия
Дата: 16.09.02 12:33
Оценка:
Здравствуйте Sergei, Вы писали:

S>Как узнать на что указывает void*

Честно — никак.
В принципе, можно в память складывать сигнатуры и пытаться определить, ожидаемый ли там тип или нет, но это
— зависит от компилятора
— зависит от платформы
— может зависить от фазы луны помноженой на уровень радиоактивных осадков на марсе в момент прохождения парада по Красной Площади

А зачем?
... << J 1.0 alpha 4 >>
"Develop with pleasure!"
Re[2]: void*
От: Sergei  
Дата: 16.09.02 13:11
Оценка:
Здравствуйте orangy, Вы писали:

O>Здравствуйте Sergei, Вы писали:


S>>Как узнать на что указывает void*

O>Честно — никак.
O>А зачем?

Может неверно задал вопрос...
Есть конструкция
if (const T* temp=static_cast<T*>(VoidPtr))
{

}
возвратит ли static_cast NULL, если VoidPtr не является типом T
Re[3]: void*
От: orangy Россия
Дата: 16.09.02 13:44
Оценка:
Здравствуйте Sergei, Вы писали:

S>Есть конструкция

S>if (const T* temp=static_cast<T*>(VoidPtr))
S>{
S>
S>}
S>возвратит ли static_cast NULL, если VoidPtr не является типом T
Я полагаю, что VoidPtr объявлен как void*, иначе поясни что это такое.

static_cast не годится:
The result of the expression static_cast<T>(v) is the result of converting the expression v to type T.
...
An expression e can be explicitly converted to a type T using a static_cast of the form
static_cast<T>(e) if the declaration “T t(e);” is wellformed,
for some invented temporary variable
t (8.5).


dynamic_cast тоже, очевидно, не спасёт:
The result of the expression dynamic_cast<T>(v) is the result of converting the expression v to type
T.
...
If T is a pointer type, v shall be an rvalue of a pointer to complete class type, and the result is an rvalue of type T. If T is a reference type, v shall be an lvalue of a complete class type, and the result is an lvalue of the type referred to by T.


reinterpret_cast очевидно всегда вернёт T* указывающий на ту же область памяти.

Так что стандартными кастами ты ничего не добъёшься, объясни конкретную задачу, тогда может найдётся конкретное решение.
... << J 1.0 alpha 4 >>
"Develop with pleasure!"
Re[3]: void*
От: comer США http://getboost.codeplex.com/
Дата: 17.09.02 11:34
Оценка:
Здравствуйте Sergei, Вы писали:

S>Может неверно задал вопрос...

S>Есть конструкция
S>if (const T* temp=static_cast<T*>(VoidPtr))
S>{
S>
S>}
S>возвратит ли static_cast NULL, если VoidPtr не является типом T

Нет. Возвратит NULL только если там NULL
(считаем что VoidPtr — это какая то переменная типа void*).
getboost.codeplex.com
citylizard.codeplex.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.