Для следующего кода:dynamic_cast (интермедиат * для Int *) - ошибка компиляции
int i = 8;
int * p_i = &i;
int * p_j;
if (typeid(p_i) != typeid(p_j))
{
p_j= dynamic_cast<int *>(p_i);
}
Я получаю следующее сообщение об ошибке компиляции:
error: cannot dynamic_cast ‘p_i’ (of type ‘int*’) to type ‘int*’ (target is not pointer or reference to class)
Что мне не хватает?
P.S. Это упрощенный пример поведения, которое я получаю (с функциями шаблона и т. Д.), Поэтому не пытайтесь найти какую-либо цель в этом сегменте кода.
UPD: Поскольку этот код является частью функции шаблона, я не могу знать, получу ли я полный класс или примитив - вот почему.
[ 'dynamic_cast'] (http://en.cppreference.com/w/cpp/language/dynamic_cast) для полиморфизма с классами. Не использовать указатели на собственные типы типа 'int'. Если у вас есть две переменные того же типа, зачем использовать бросок в первую очередь? –
Зачем использовать 'dynamic_cast', если у вас уже есть' if' on 'typeid'? Если вы не хотите, чтобы трансляция проходила иерархию наследования, она не нужна. –
Поскольку у меня есть функция шаблона, которая может иметь как примитивный, так и полиморфный тип –