Được rồi tôi sẽ đưa ra một ví dụ đơn giản của vấn đề của tôi:Tại sao tôi không thể chuyển thông số mẫu vào mẫu khác?
void Increment(Tuple<int, int>& tuple) {
++tuple.Get<0>();
}
int main() {
Tuple<int, int> tuple;
tuple.Get<0>() = 8;
Increment(tuple);
printf("%i\n", tuple.Get<0>()); // prints 9, as expected
return 0;
}
này biên dịch tốt, và tất cả là peachy. Hàm Increment chỉ tăng phần tử đầu tiên trong tuple, và sau đó tôi in phần tử đó. Tuy nhiên, nó sẽ không được tốt đẹp nếu chức năng tăng trưởng của tôi có thể được sử dụng trên bất kỳ loại yếu tố?
template <typename T>
void Increment(Tuple<T, T>& tuple) {
++tuple.Get<0>(); // <-- compile ERROR
}
int main() {
Tuple<int, int> tuple;
tuple.Get<0>() = 8;
Increment<int>(tuple);
printf("%i\n", tuple.Get<0>());
return 0;
}
dụ thứ hai của tôi spits ra lỗi sau tại thời gian biên dịch:
error: expected primary-expression before ')' token
Tôi đang ở wits của tôi end cố gắng tìm ra lý do tại sao điều này gây ra vấn đề. Vì tham số mẫu là 'int', mã được tạo nên là giống hệt đối với ví dụ được mã hóa cứng của tôi. Làm cách nào tôi có thể làm việc này?
Các sự xấu xa và trickiness của việc sử dụng như trong câu trả lời của GMAN có lẽ là lý do tại sao cả hai std và thúc đẩy các bộ có một miễn phí 'chức năng get': '++ được <0> (tuple); ' – UncleBens