У меня проблема с назначением указателя времени выполнения на C++. У меня есть класс base
с 2-мя членами и потоками.Полиморфизм времени выполнения с указателями в C++
class base {
struct base_struct {
int a;
};
base_struct thread;
std::vector<base_struct> threads;
void fn() {}
};
derived1
является производным от base
и имеет те же два члена (thread
и threads
), но различного типа.
class derived1 : public base {
struct derived_struct11 : public base_struct {
int b;
};
derived_struct11 thread;
std::vector<derived_struct11> threads;
void fn() {
printf();
}
};
derived2
также получен из base
и имеет те же два члена (thread
и threads
), но различного типа.
class derived2 : public base {
struct derived_struct22 : public base_struct {
int c;
};
derived_struct22 thread;
std::vector<derived_struct22> threads;
void fn() {
printf();
}
};
только во время выполнения я могу знать, следует ли использовать derived1
или derived2
. Так что я сделал это следующим образом:
base base_obj;
derived1 derived1_obj;
derived2 derived2_obj;
base *ptr ;
В функции выполнения:
{
if (condition == yes)
ptr = &derived1_obj;
else
ptr = &derived2_obj;
}
Проблема заключается в том, что я могу получить доступ к функциям coreectly с this
указателем. Но значение потоков (например:.. threads.size()
всегда показано, как из base
класса
Я хочу знать, какой лучший способ осуществить это
Это не должно компилироваться, так как 'base :: base_struct' является' private'. –
Это был всего лишь образец :) – deeps8us
Это был плохой пример. Очень важно, чтобы вы отправляли * правильный * код. Это облегчает ** ** облегчение. –