Приветствую.
Вот какая фигня. Есть интерфейс, например
struct A {
virtual ~A() { }
virtual void somecall( ) = 0;
};
class B: public A {}
.....
mumap.getinst<B>( ).somecall( );
вызов getinst находит в мапе объект, приводит его к требуемому классу (static_cast) и возвращает ссылку нужного типа. колючем в мапе сейчас обертка над std::type_info, что не очень хорошо, поскольку можно сделать -fno-rtti и typeid будет недоступен.
Вопрос в том, как бы так сгенерить для каждого такого класса-наследника от A уникальный id и пользовать его в качестве ключа.
рассматриваю пока варианты:
- некое имя, которое прописывать к каждому классу (плохо)
- хеш от имени файла (макрос __FILE__). Да, каждый наследник реализован в отдельном. Не переносимо (?)
- случайное число, сгенеряченое при старте и лежащее в статическом члене + проверка на то, что такое уже, возможно попадалось и перегенерячивание заново при заполнении мапы. (хм, даже не знаю).
какие есть еще варианты?