Здравствуйте, Erop, Вы писали:
E>Здравствуйте, kinoman, Вы писали:
K>> т.е. на самом деле есть не avar.method1(); а avar.method1(i1,i2,i3);. Т.е. сейчас всё примерно так:
K>>K>>//main.cpp
K>>...
K>>if (arg1=="argT1_1" && arg2=="argT2_1") {
K>> A<T1_1,T2_1> avar;
K>> avar.method1(i1,i2,i3);
K>> avar.method2(j1,j2);
K>>}
K>>...
K>>// adef.h
K>>template <class T1, class T2> void A<T1,T2>::method1(int i1, int i2, int i3) {
K>> typename T1::ZZ1 zz1(i1,i2);
K>> typename T2::ZZ2 zz2(zz1,i3);
K>> ...
K>>}
K>>
E>Совсем запутал.
E>А как узнать, какие ппрамниры в каком случае пнредавать?
Если речь про i1,i2,i3,j1,j2 , то с ними проблем нет — независимо от arg1 и arg2 они передаются как показано выше (просто не показано откуда они берутся).
E>Один из путей решения такой проблемы — сделать код полиморфным.
E>Типа написать какую-то структуру из котооой легео извлечь нужные ппрамнтры и полиморфную иерархию шаблонных классов, которые заворачивают всё это дело.
E>После этого пишешь шаблон класса-регистратора, который устанавливает ооображение строчек на типы.
E>Ну и получаешь прстую функцию, которая по строчке гннерит то, что надо...
E>Геннришь левый и правый аргумент, акод их сочетающий, пишешь полиморфно...
Как я писал — я давно уже не держал в руках C++, и выражение "полиморфную иерархию шаблонных классов" вскипятило мне мозг. Если не сложно можно микропример? Я кажется понял что имеется в виду но не уверен.
K>>Вобщем избавиться от этой конструкции без RTTI или правки той либы на мой взгляд невозможно. Отсюда и возникла исходная задача.
E>Мне кажется, что если ты расскажешь чуть блльше, то легчебудет объяснтьь кто что думпнт по поводу твоего вопооса.
Да я собственно уже рассказал вроде вполне подробно в последнем примере. Больше добавить по сути нечего. Просто ещё раз уточню — в моём коде шаблон A<T1,T2> мы можем править/заменять на что-то другое, но типы-параметры этого шаблона(T1_1,...T1_X,T2_1,...,T2_X) для нас неприкасаемы (в том плане что те классы мы править не можем).
Вобщем на данный момент я прощупываю вариант решения с кодогенерацией и boost::mpl. Почти есть уверенность что сработает, но гложут сомнения что спустя полгода даже я смогу за час вспомнить/понять как это работает.