C ++; Как превратить строку (имя класса) в тип? - PullRequest
2 голосов
/ 23 августа 2011

Функция должна брать имя класса и возвращать объект этого типа. Как это сделать в C ++?

Ответы [ 3 ]

7 голосов
/ 23 августа 2011

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

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

2 голосов
/ 23 августа 2011

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

Таким образом, вопрос будет: Можете ли вы расширить ваши конкретные требования?

0 голосов
/ 23 августа 2011

Вы должны полагаться на фреймворки, которые отражают ваши объекты, такие как мета-объектная система Qt, или писать свои собственные.

Однако это неверное отражение и работает только с вашей ручной помощью, либо в форме необходимости вызова инструментов, либо в форме необходимости регистрировать создаваемые классы в платформе.

...