Ho un C++ frammento di seguito con un runtime for
ciclo,Template -ing un ciclo 'for' in C++?
for(int i = 0; i < I; i++)
for (int j = 0; j < J; j++)
A(row(i,j), column(i,j)) = f(i,j);
Il frammento viene chiamato ripetutamente. I limiti del ciclo 'I' e 'J' sono noti al momento della compilazione (I/J sono nell'ordine da 2 a 10). Vorrei srotolare i loop in qualche modo usando i template. Il collo di bottiglia principale sono le funzioni row() e column() e f(). Vorrei sostituirli con metaprogrammi equivalenti che vengono valutati in fase di compilazione, usando i trucchi row<i,j>::enum
.
Quello che mi piacerebbe davvero è qualcosa che alla fine risolve il loop in una sequenza di affermazioni del tipo:
A(12,37) = 0.5;
A(15,23) = 0.25;
A(14,45) = 0.25;
Ma mi piacerebbe farlo senza distruggendo la for
- struttura for
troppo. Qualcosa nello spirito di:
TEMPLATE_FOR<i,0,I>
TEMPLATE_FOR<j,0,J>
A(row<i,j>::value, column<i,j>::value) = f<i,j>::value
Può aumentare :: lambda (o qualcos'altro) aiutarmi a creare questo?
Il collegamento è interrotto (dominio * ubiety.uwaterloo. ca * non esiste). –
@PeterMortensen, ok, l'ho risolto. –