Я хочу, чтобы выяснить, что является родителем в функции шаблона класса типа T, предположу, что я имею следующие классы:Получить родитель типа Т в функции шаблона
class A{
...
}
class B: public A{
...
}
class C: public B{
...
}
template<typename T>
size_t getBaseHashCode()
{
return typeid(base_of(T)).hashcode();
}
int main()
{
A a;
C c;
size_t size = getBaseHashCode<C>();// must return hashcode of class B
}
есть в любом случае для найти родителя типа T и реализовать функцию base_of?
Edit: действительно то, что я хочу сделать, это:
Я завод класс, который создает объекты для меня:
template <typename B>
class Factory{
public:
template <typename D>
void registerType(std::string name)
{
static_assert(std::is_base_of<B, D>::value, "class doesn't derive from the base");
table_[name] = &createFunc<D>;
}
B* create(std::string name)
{
const auto it = table_.find(name);
if(it != table_.end())
return it->second();
FILE_LOG(logERROR) << "unidentified option, acceptable options are:";
for(auto const &m : list())
FILE_LOG(logERROR) << '\t' << m;
return nullptr;
}
std::vector<std::string> list()
{
std::vector<std::string> lst;
for(auto const &iter : table_)
lst.push_back(iter.first);
return lst;
}
private:
template<typename D>
static B* createFunc()
{
return new D();
}
typedef B* (*PCreateFunc)();
std::map<std::string, PCreateFunc> table_;
};
в функции registerType Я хочу установить некоторые свойства типа D или он является родителем, а затем в функции create, я хочу создать на нем объекты.
Зачем вам это нужно? Похоже на XY-проблему для меня. –
Что делать с множественным наследованием? – Quentin
У меня есть заводский класс (на основе абстрактного шаблона фабричного проектирования), который при создании объектов проверяет свойство в нем или его родителей, а затем на него (значение свойства) создает объект. поэтому я хочу знать, что это за тип и каков тип его родителей. – abdolahS