Как я могу Typecast с type_info? - PullRequest
       28

Как я могу Typecast с type_info?

10 голосов
/ 11 февраля 2011

Я сохранил указатель на type_info объект.

int MyVariable = 123;
const std::type_info* Datatype = &typeid(MyVariable);

Как я могу использовать это, чтобы привести другую переменную к этому типу? Я пробовал это, но это не работает:

std::cout << ((*Datatype)3.14) << std::endl;

Использование функции формы приведения типов также не работает:

std::cout << (*Datatype(3.14)) << std::endl;

Ответы [ 3 ]

16 голосов
/ 11 февраля 2011

Просто вы не можете сделать это, используя type_info.Кроме того, в вашем примере DataType - это не тип , это указатель на объект типа type_info.Вы не можете использовать это, чтобы разыграть.Приведение требует тип , а не указатель или объект!


В C ++ 0x вы можете сделать это, однако,

    int MyVariable = 123;

    cout << (decltype(MyVariable))3.14 << endl;

    cout << static_cast<decltype(MyVariable)>(3.14) << endl;

Вывод:

3
3

Демонстрация в сети: http://www.ideone.com/ViM2w

5 голосов
/ 11 февраля 2011

Я не думаю, что такой кастинг можно сделать. Предположим, вы могли бы делать «динамическое» приведение типа этого во время выполнения (не означает dynamic_cast). Затем, если вы использовали результат приведения для вызова функции, компилятор больше не мог выполнять проверку типов параметров, и вы могли бы вызвать вызов функции, который на самом деле не существует.

Поэтому это не сработает.

4 голосов
/ 11 февраля 2011

Typecasting не является процессом во время выполнения, это процесс компиляции, по крайней мере, для типа, который вы приводите от до .Я не думаю, что это может быть сделано.

...