Tôi có một hàm có khối dữ liệu và kích thước của khối và con trỏ hàm làm đối số. Sau đó, nó lặp lại dữ liệu và thực hiện một phép tính trên mỗi phần tử của khối dữ liệu. Sau đây là phác thảo thiết yếu của những gì tôi đang làm:Con trỏ chức năng chung trong C
int myfunction(int* data, int size, int (*functionAsPointer)(int)){
//walking through the data and calculating something
for (int n = 0; n < size; n++){
data[n] = (*function)(data[n]);
}
}
Các chức năng tôi đi qua như các đối số giống như thế này:
int mycalculation(int input){
//doing some math with input
//...
return input;
}
này hoạt động tốt, nhưng bây giờ tôi cần phải vượt qua một biến bổ sung cho hàm con trỏ của tôi. Một cái gì đó dọc theo các dòng
int mynewcalculation(int input, int someVariable){
//e.g.
input = input * someVariable;
//...
return input;
}
Có cách nào thanh lịch để đạt được điều này và đồng thời giữ ý tưởng thiết kế tổng thể của tôi không?
Có lý do nào mà bạn không thể thay đổi khai báo hàm để bao gồm tham số nguyên bổ sung không? –
@dbingham: Nếu tôi không lầm, tôi sẽ cần một "chức năng" thứ hai sau đó, sẽ lấy một con trỏ hàm với hai "int". Vấn đề là, rằng sẽ có nhiều chức năng hơn với các loại khác nhau và số lượng đối số. Điều đó sẽ làm rối loạn thiết kế của tôi. – Lucas
Tôi không chắc chắn, tôi hiểu câu hỏi một cách chính xác ngay từ đầu. Tôi nghĩ rằng Jefromi có căn cứ khá tốt được bảo hiểm tại thời điểm này anyway. –