2011-03-18 27 views
8

Bir süre önce işlev türünde bir parametre alan bir C++ işlevi yazmanın mümkün olduğunu buldum ( işlev işaretçisi türünü değil!).C++ işlev türünde bir parametre aktarmak ne demektir?

void MyFunction(double function(double)); 

Sorum o işlevi türünde bir değişken olması anlamı budur, başka bir bağlamda birini beyan edemez çünkü: Örneğin burada kabul eden bir geri çağırma işlevi alır ve bir çift döndüren bir fonksiyondur. Semantik olarak, bir fonksiyon göstergesinden veya bir işleve referanstan nasıl farklıdır? Fonksiyon göstergeleri ile bilmem gereken fonksiyon tipi değişkenleri arasında önemli bir fark var mı? Sadece void f(int x[]) gibi

+0

Daha önce hiç böyle C++ görmedim. –

+0

Bildiğim kadarıyla C++ 'da mümkün değil. Bunun mümkün olduğu bir örnek verebilir misiniz? –

+0

Bu, shorthand 'arrData == & arrData [0]' dizisi gibi şeylerden biridir, ancak göremediğimden beri “boost :: function” görüntülendiğinden ve lambda işlevlerinin tam olarak ne zaman değişeceğinden çok. – AJG85

cevap

13

void f(int* x) aynıdır, aşağıdaki iki özdeş: resmi dili (C++ 03 8.3.5/3)

void MyFunction(double function(double)); 
void MyFunction(double (*function)(double)); 

Veya bir fonksiyonu türünü belirlerken ,

türü, herhangi bir parametre, "T dizisi" ya da her bir parametresinin türü belirlendikten sonra "T döndürme fonksiyonu" "işaretçi T için" olacak şekilde ayarlanır ya da "işaretçigeri işlev 0, "sırasıyla.

+0

Harika! Bu soruyu mükemmel bir şekilde cevaplıyor. Teklif için – templatetypedef

+0

+1. Bu çok cesurca! – Nawaz

+3

ISO Standardının açık ve anlaşılabilir olduğu nadir durumlar vardır. –

İlgili konular