А как "восстанавливать" информацию о типах? Обратный type erasure
От: x-code  
Дата: 17.02.15 08:26
Оценка:
Попробую объяснить что мне нужно (хотя это и непросто)

Есть код, написанный на шаблонах. Выбор специализаций происходит на этапе компиляции.
Далее, в программе где-то происходит "type erasure", информация о типах для компилятора теряется.

Например, есть некая структура.
И есть некая унифицированная property table, таблица из двух столбцов (имя и значение) и N строк (каждая строка — поле структуры).
В какой-то момент эта таблица заполняется унифицированным способом. В ней есть имена полей и их значения. Каждой строке как-бы соответствует какой-то тип данных. Поскольку сама таблица унифицированная, в ней уже нет compile-time информации о типах полей; но в ней могут быть некие runtime идентификаторы этих типов (скажем, элементы enum).

Дальше, пользователь что-то щелкает мышью, и нам нужно произвести обратное действие — восстановить из строки тип, опять перейти к шаблонному коду. Например, по щелчку на некотором поле нужно узнать что там был за тип и вызвать шаблонную функцию, специализированную для этого типа, которая что-то сделает.

То есть, в общем и целом — нужна какая-то конструкция типа большого switch, которая бы позволяла явно вызвать правильную специализацию шаблонного кода в зависимости от значения некой переменной времени выполнения.

Иными словами, как называется операция, обратная type erasure, как это обычно делают и делают ли вообще? Какие идиомы существуют для этого?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.