После прочтения хеширования строки времени компиляции C ++ с Boost.MPL и рассмотрения возникшей проблемы мне пришло в голову следующее:
У меня есть базовый класс:
template<class Command>
class Base {
typedef Command CommandType;
}
Предполагается, что это базовый класс утилит для классов Commands, поэтому им не нужно самостоятельно определять и определять некоторые члены, они просто наследуют от Base те типы, на которые они ссылаются. Поэтому их можно использовать так:
class CommandInstantiatorA : public Base<CommandA>
{
public:
static std::string GetID() { return "CommandInstantiatorA "; }
}
Однако есть еще один метод (GetID), который я не смог «шаблонизировать», который возвращает уникальный идентификатор через приложение. Я хотел бы иметь возможность хэшировать тип, передаваемый классу Base, поэтому другим классам нужно будет только указать тип. Примерно так:
template <class Base>
class Base {
typedef boost::hash_value(TO_STRING(Base)) ID; //should also be read as: typedef boost::hash_value("CommandA") ID;
...
}
Существует ли такой макрос (TO_STRING), который бы вывел результат "CommandA" в последнем примере. Есть ли в Boost.MPL что-нибудь, что может это сделать?