2013-09-20 2 views
0

Возможно ли вообще сопоставить класс и/или его подклассы, например myClass, с строкой/int/what?C++ - Сопоставление класса со строкой

Это то, что я имею в виду:

map<myClass, string> myMap = { 
    {subclass1, "one"}, 
    {subclass2, "two"} 
    //etc etc 
} 

У меня возникли проблемы с компиляцией рабочий образец кода. Могу ли я помочь с этим?

Примечание: Я использую C++ 11

+0

Я не понимаю, почему нет? – kchoi

ответ

4

Вы можете использовать std::type_index для этого:

#include <map> 
#include <string> 
#include <typeindex> 

std::map<std::type_index, std::string> m { { typeid(myClass), "zero" } 
             , { typeid(subclass1), "one" } 
             , { typeid(subclass2), "two" } 
             }; 
+0

Удивительный! Этот код работает, но как я могу получить доступ к карте? Пытаясь передать оператор [], класс дает массу ошибок. – Mastergeek

+1

@Mastergeek вы, конечно, передаете 'typeid'. Однако обратите внимание, что используемые типы [** нужны ** для использования виртуальных методов] (http://stackoverflow.com/a/1986448/85371) для работы в _runtime_: http: //coliru.stacked-crooked. com/a/6dce760d9a52880c (см., что произойдет, если вы удалите виртуальный деструктор) – sehe

+0

@Mastergeek: Я думаю, что страница, с которой я связан, содержит достаточные примеры, не? –

Смежные вопросы