Здравствуйте, uzhas, Вы писали:
U>Здравствуйте, kinoman, Вы писали:
U>один из вариантов:
U>U>{
U> A avar(arg1, arg2);
U> avar.method1();
U> avar.method2();
U>}
U>
U>смотрите, как просто
Угу, просто. Пройтись if-ом по arg1 мы получим T1_1, затем также T2_1 и создадим объекты этих классов (суммарно if-оф на порядок меньше чем для комбинации шаблона). Если это не тролинг, объяню почему такого нет а есть шаблон. Проблема в том, что в той либе которую мы не можем трогать в каждом TX_Y через typedef определёны типы ZZ1 и ZZ2
(только не спрашивай зачем — оно просто так есть) и объекты этих типов нам тоже нужны, но их конструкторы вызываются с параметрами в зависимости от параметров методов класса A, т.е. на самом деле есть не avar.method1(); а avar.method1(i1,i2,i3);. Т.е. сейчас всё примерно так:
//main.cpp
...
if (arg1=="argT1_1" && arg2=="argT2_1") {
A<T1_1,T2_1> avar;
avar.method1(i1,i2,i3);
avar.method2(j1,j2);
}
...
// adef.h
template <class T1, class T2> void A<T1,T2>::method1(int i1, int i2, int i3) {
typename T1::ZZ1 zz1(i1,i2);
typename T2::ZZ2 zz2(zz1,i3);
...
}
Вобщем избавиться от этой конструкции без RTTI или правки той либы на мой взгляд невозможно. Отсюда и возникла исходная задача.