У меня есть вопрос, связанный с дизайном реализации класса шаблона.Шаблон внутренних классов на основе параметров
шаблон 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);
}
}
...
};
Как В1 и В2 классы, связанные с внутренней A1 и реализации А2, то предпочтительно, чтобы не сделать конечный пользователь в курсе об их существовании, так специализации шаблона, как
AT<A1, B1> a;
неприемлемо.
Каков наилучший способ создания такого класса шаблонов и разрешить внутреннее дифференцирование на основе класса, с которым был специализирован шаблон?
Спасибо!
Я изменил тег 'rtti' на' template'. Этот вопрос больше связан с шаблонами * compile time *, чем с * информацией типа RunTime *. –
Мне сложно понять ваш вопрос. Что означает 'a AT;' должно означать? (Недействительный синтаксис afaict.) 'AT ' невозможен вообще, AT имеет только один аргумент шаблона. 'dynamic_cast' - это среда выполнения, я не думаю, что вы хотите, чтобы там - это часть вашей проблемы? –
Mat
Перечитывая вопрос, я начинаю сомневаться в том, что то, что я понял и что вам нужно, одно и то же. Вы намерены использовать 'AT' полиморфно через указатели/ссылки на 'A'? Если это так, тогда вам нужен RTTI, но это, скорее всего, должно быть разрешено с помощью функции 'f'' virtual' и с отправкой реализации в соответствующее переопределение. –