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