Если у меня есть прокси-шаблон Class A
, а прокси для него - Class PrxA
.Вопрос1
Если я определю несколько функций как virtual
в A
, должны ли они быть определены как virtual
даже в PrxA
?
Теперь, если
Class B : public A
{
///code
}
Я считаю, что прокси-класс также должен наследовать.
Class PrxB : public PrxA {
/// code
}
Теперь при условии, что эти прокси-классы имеют следующие правила
- Создание исходного класса в c'tor
- Будет передано внутри для любой ссылки /указатель param, передаваемый через различные внутренние классы
- Чтобы получить фактический impl прокси-класса (т.е. получить
A
из PrxA
, у нас есть хранилище impl, которое даст нам A
из PrxA
иB
из PrxB
.
Теперь есть класс C
, который принимает PrxA в качестве ссылки в своем c'tor.
`C :: C (PrxA & A): pa (A), a (getImpl (PrxA))
Локальные члены класса C, которые инициализируются.
PrxA& pa;
A& a;
Если я передам A, это будет отлично работать. Нет проблемздесь.
Вопрос2 Когда я передаю B
этому классу C
, как лучше всего получить значение B
(второе, инициализированное в c't'оре C? (примечание B
полученный из A
)
Я могу подумать о приведении в getImpl(A)
что-то вроде этого, но не похоже на хороший soln.
A* getAImpl(PrxA& pa)
{
if (implA(pa) != NULL)
return A;
else
return dynamic_cast<B>(A); // can't do this. since A will be returned but I actually need B
}
Какой подход я должен использовать здесь, если мне нужно передать PrxB
в классы, такие как C
, которые используют PrxA в качестве эталона?Есть ли какой-то подход, чем кастинг.
Также интересно здесь, если мы ограничимся одним конструктором, мы можем получить ссылку PrxA или PrxB, которую необходимо обработать соответствующим образом, чтобы получить impl в инициализаторах.Мне нужно знать хороший подход.