inlining karşı şablonlarla metaprogramming o dizi elemanları kopyalamak için aşağıdaki gibi kod yazmak değer mi:C++
#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;
}
} //()
ya da bir satır içine işlevini kullanmak daha iyidir?
Birinci dezavantaj
şablonda değişkenleri kullanamazsınız olmasıdır.
Sadece std :: copy' kullanmalısınız. * Bu *, int dizileri arasında kopyalamayı memmove'a iletmek için bazı meta programlama tekniklerinden yararlandığından neredeyse emin olabilirsiniz. Zaman metaprogramming :(derlemek C++ bakarak artık zaman harcamak daha – UncleBens
İsa, doğrusu seni gerek şey kopyalayıp, bunu kopyalamak lazım., prolog programlama 10 ömür geçirmek istiyorum, sen yapabileceğiniz düşünerek ondan alamıyorum Eğer siz kopyalanacak değişkenleri teşhis edebilirim sırf derleme zamanında –
@Hassan: veri türleri ve hizalama bağlı olarak, kopyalama için farklı stratejiler olsa uygun olabilir ve kadar dramatik operasyonu hızlandırmak mümkün olabilir it. "sadece bir kopya" değildir. (Ama @UncleBens'in dediği gibi, 'std :: copy' zaten bunu yapar) – jalf