У меня есть вопрос, связанный с дизайном реализации класса шаблона.
Шаблон AT может быть специализирован только с параметрами шаблона A1 и A2:
AT<A1> a;
or
AT<A2> a;
В шаблоне есть функция, которая может использовать классы B1 и B2. В частности, когда шаблон специализируется на классе A1, функция должна использовать B1, а для A2 следует использовать B2.
Например:
template< class T > class AT : public A
{
int size;
public:
int f()
{
if ( dynamic_cast<A1*> this != 0 ) {
size = sizeof( B1 );
}
else {
size = sizeof( B2 );
}
}
...
};
Поскольку B1 и B2 являются классами, связанными с внутренней реализацией A1 и A2, желательно, чтобы конечный пользователь не знал об их существовании, поэтому специализация шаблона, такая как
AT<A1, B1> a;
недопустимо.
Как лучше всего спроектировать такой класс шаблона и разрешить внутреннюю дифференциацию на основе класса, с которым шаблон специализировался?
Спасибо!