Я конвертирую double
переменную в void pointer
:
double doub = 3;
void *pointer = &doub;
Если я конвертирую указатель void в int, а не удваивать:
int i = *((int *) pointer);
Я получаю: i=0
.
Как проверить, выполнено ли задание, а возвращаемое значение равно 0, поскольку исходное значение равно 0 или не удалось?
Поскольку C++ не является динамически типизированным языком, вы не можете делать это прямо с void*
но вам нужно использовать dynamic_cast
и некоторую оболочку шаблона:
struct type_base
{
virtual ~type_base() {}
template<typename T> T *get_value()
{
if(type<T>* t=dynamic_cast<type<T>*>(this))
return &t->value;
return 0;
}
};
template<typename T>
struct type: type_base
{
T value;
};
Это позволяет вам "потерять" информацию типа и запросить ее для разных типов следующим образом:
type<int> v;
v.value=1;
type_base *p=&v;
float *x=p->template get_value<float>(); // fails
int *y=p->template get_value<int>(); // works
int i = (int)(*pointer);
dynamic_cast