Возможно ли иметь другое определение типа, основанное на том, какой производный класс был создан?Могу ли я объявить о другом typedef в зависимости от класса?
Скажем, у меня есть родительский класс с виртуальной функцией func()
, два члена Int и вектор типа myType
и двух дочерних классов, которые разделяют те же ИНТ членов, и вектором, но их реализация func()
требует myType
к быть немного другим.
Например:
class Parent {
protected:
int myMember;
int myOtherMember;
std::vector<myType> vec;
public:
Parent(variable);
virtual int func() = 0;
}
class Child1 : public Parent {
private:
typedef <some type definiton> myType;
public:
Child1(variable) : Parent(variable){};
int func() {return someFunc();};
}
class Child2 : public Parent {
private:
typedef <some other type definiton> myType;
public:
Child2(variable) : Parent(variable){};
int func() {return someOtherFunc();};
}
Могу ли я сделать что-то вроде этого? когда я это пробовал, он создает циклическую зависимость в файлах заголовков, потому что класс Parent
должен быть включен первым, но тогда ему необходимо определить myType
.
Есть ли способ продвижения объявления myType
в зависимости от класса? или мне просто нужно включить другой вектор myType
в каждом классе, как так:
class Parent {
protected:
int myMember;
int myOtherMember;
public:
Parent(variable);
virtual int func() = 0;
}
class Child1 : public Parent {
private:
typedef <some type definiton> myType;
std::vector<myType> vec;
public:
Child1(variable) : Parent(variable){};
int func() {return someFunc();};
}
class Child2 : public Parent {
private:
typedef <some other type definiton> myType;
std::vector<myType> vec;
public:
Child2(variable) : Parent(variable){};
int func() {return someOtherFunc();};
}
Сделать это аргументом шаблона вашего родительского класса. – tkausl
ах, спасибо, я полностью забыл о шаблонах, это было пару лет с тех пор, как я сделал что-нибудь с C++, и я медленно вспоминаю все это. – guskenny83