Có đáng để viết mã như sau để sao chép các phần tử mảng:C++ Lập trình meta với các mẫu so với nội tuyến
#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;
}
} //()
hoặc là nó tốt hơn để sử dụng một chức năng inlined?
Hạn chế đầu tiên là bạn không thể sử dụng các biến trong mẫu.
Bạn chỉ nên sử dụng 'std :: copy'. Bạn có thể gần như chắc chắn rằng * that * sử dụng một số kỹ thuật lập trình meta để chuyển tiếp sao chép giữa các mảng int vào memmove. – UncleBens
Chúa Kitô, tôi muốn dành 10 thời gian sống lập trình prolog, hơn là dành thời gian xem xét thời gian biên dịch lập trình C++: (Nếu bạn phải sao chép một cái gì đó, bạn phải sao chép nó, bạn không thể thoát khỏi nó bằng cách nghĩ rằng bạn có thể làm tại thời điểm biên dịch chỉ vì bạn nghĩ rằng bạn có thể xác định các biến sẽ được sao chép –
@Hassan: Tùy thuộc vào kiểu dữ liệu và căn chỉnh, các chiến lược sao chép khác nhau có thể phù hợp và có thể tăng tốc độ hoạt động một cách đáng kể. không phải là "chỉ là một bản sao". (Nhưng như @ UncleBens nói, 'std :: copy' đã làm điều này) – jalf