Czy warto napisać kod jak poniżej, aby skopiować elementy tablicy:C++ METAPROGRAMOWANIE z szablonami porównaniu inline
#include <iostream>
using namespace std;
template<int START, int N>
struct Repeat {
static void copy (int * x, int * y) {
x[START+N-1] = y[START+N-1];
Repeat<START, N-1>::copy(x,y);
}
};
template<int START>
struct Repeat<START, 0> {
static void copy (int * x, int * y) {
x[START] = y[START];
}
};
int main() {
int a[10];
int b[10];
// initialize
for (int i=0; i<=9; i++) {
b[i] = 113 + i;
a[i] = 0;
}
// do the copy (starting at 2, 4 elements)
Repeat<2,4>::copy(a,b);
// show
for (int i=0; i<=9; i++) {
cout << a[i] << endl;
}
} //()
czy lepiej użyć inlined funkcję?
Pierwszą wadą jest to, że nie można używać zmiennych w szablonie.
Powinieneś po prostu użyć 'std :: copy'. Możesz być prawie pewien, że * to * wykorzystuje niektóre techniki metaprogramowania, aby przekazać kopiowanie pomiędzy tablicami int do memmove. – UncleBens
Chryste, wolałabym spędzić 10 programików na programowanie w czasie życia niż spędzać więcej czasu na metaprogramowaniu w czasie kompilacji C++ :(. Jeśli musisz coś skopiować, musisz go skopiować, nie możesz oderwać się od niego, myśląc, że możesz to zrobić w czasie kompilacji tylko dlatego, że myślisz, że możesz zidentyfikować zmienne, które zostaną skopiowane. –
@Hassan: W zależności od typów danych i dopasowania, różne strategie kopiowania mogą być odpowiednie, i może być możliwe znaczne przyspieszenie operacji. nie jest "tylko kopią". (Ale jak @UncleBens mówi, 'std :: copy' już to robi) – jalf