Bir veri bloğunu ve bloğun boyutunu ve bir işlev işaretçisini argüman olarak alan bir işlev var. Daha sonra veriler üzerinde yineleme yapar ve veri bloğunun her bir öğesi üzerinde bir hesaplama yapar.Genel işlev işaretçileri 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]);
}
}
Ben argümanlar olarak geçirerek fonksiyonları şuna benzer: aşağıdaki Ben ne yapıyorum temel anahat olan bu iyi çalışıyor
int mycalculation(int input){
//doing some math with input
//...
return input;
}
ama şimdi geçmesi gerekiyor benim fonksiyonuma ek bir değişken. hatlar
int mynewcalculation(int input, int someVariable){
//e.g.
input = input * someVariable;
//...
return input;
}
boyunca bir şey benim genel tasarım fikri tutarak bunu başarmak ve aynı zamanda zarif bir yolu var mı?
Ek tamsayı parametresini içerecek şekilde işlev bildirimini değiştirememenizin bir nedeni var mı? –
@dbingham: Eğer seslendirme yapmazsam, ikinci bir "fonksiyona" ihtiyacım var, o zaman iki "ints" ile bir fonksiyon göstergesine sahip olacaktı. Sorun şu ki, farklı tip ve argüman sayısıyla çok daha fazla fonksiyon olacak. Yani bu benim tasarımımı berbat eder. – Lucas
Emin değilim, soruyu başlangıçtan doğru anladım. Bence Jefromi zaten bu noktada oldukça iyi bir şekilde kaplanmış üslere sahip. –