Re[2]: два строковых аргумента => параметры-типы шаблона
От: kinoman http://pseudo-tech-notes.blogspot.com/
Дата: 28.09.11 09:46
Оценка: +1
Здравствуйте, 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 или правки той либы на мой взгляд невозможно. Отсюда и возникла исходная задача.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.