Возвращение исходного типа переменной варианта наддува - PullRequest
0 голосов
/ 21 марта 2012

Не могли бы вы помочь мне вернуть точное имя оригинального объекта, помещенного в boost::variant?

У меня есть что-то вроде этого

typedef boost::variant<macro,module> ref_var;

Возможно ли вернутьимя типа оригинального объекта?В этом случае (макрос или модуль)

Я пытался получить его, используя

typeid(v).name()

, но это дает мне странное имя, которое не является ни макросом, ни модулем:

PN5boost7variantI5macro6moduleNS_6detail7variant5void_ES5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_S5_EE

1015 *1016* *1016* *1016* 1016

Ответы [ 3 ]

3 голосов
/ 21 марта 2012

variant::type() возвращает std::type_info для содержимого варианта. Только не используйте это, чтобы выбрать, как действовать по варианту - лучше всего это делать с посетителями.

1 голос
/ 21 марта 2012

Если все, что вам нужно, это вернуть текстовое представление типов, содержащихся в варианте, вы можете свернуть свое собственное решение:

const char* ref_var_typename(const ref_var& v) {
    static const char* types[] = { "macro", "module" };
    return types[v.which()];
}
0 голосов
/ 21 марта 2012

Нет способа (в стандарте) получить фактическое имя типа C ++ любого типа , независимо от того, variant или нет. Лучшее, что вы можете сделать, это получить type_info, но, как вы видите, это искаженное имя, а не настоящее имя типа C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...