Проверьте, успешно ли явное приведение

0

Я конвертирую double переменную в void pointer:

double doub = 3;
void *pointer = &doub;   

Если я конвертирую указатель void в int, а не удваивать:

int i = *((int *) pointer);  

Я получаю: i=0.

Как проверить, выполнено ли задание, а возвращаемое значение равно 0, поскольку исходное значение равно 0 или не удалось?

  • 1
    Вы не читаете, вы просто читаете память, в которой находится двойное число, как если бы оно было целым числом. Сделайте так: int i = (int)(*pointer);
  • 2
    Приведения никогда не завершаются, за исключением dynamic_cast
Показать ещё 14 комментариев
Теги:
casting

1 ответ

1

Поскольку 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню