2015-12-05 14 views
6

Aşağıdaki basit işlevin, çağrılan işlevi çağırmasını istiyorum, ancak işlev, birden çok işlev tarafından çağrıldığından, özel olarak adlandırılan işlevi tanımak ve sonra onu çağırmak gerekir.Bu işlevi çağırmak için nasıl bir işlev alabilirim?

int wrong() 
{ 
    std::cout << "WRONG \n"; 
    return 0; 
} 

Bir takip olarak, bu bir boşluk olarak daha iyi ifade edilen bir işlev türü midir?

+3

Size hangi işlevi denediğinizi belirlemenin standart bir yolu yoktur. Belki de ortamınız mevcut çağrı yığınını elde etmenin bir yoludur, ancak yine de bu standart dışı olacaktır. – PaulMcKenzie

+0

Genel olarak, bunu yapmak istemezsiniz. Yinelemeli bir döngüde son bulabilirsin. Hangi sorunu çözmeye çalışıyorsunuz? –

+0

Basit bir test yazmaya çalışıyorum - kullanıcının yaptığı bir test gibi. Yanlış cevap verdikleri her seferinde, bu işlevin çağrılmasını istiyorum, ancak ana sayfaya geri dönmek yerine, bir sonraki soruyu okurken, kullanıcının yanlış anladığı sorusuna geri dönmesini istiyorum. – ticklemyiguana

cevap

3

Ne istiyorsunuz geri arama.

typedef int (*CallbackType)(char c); 

int wrong(CallbackType callback) 
{ 
    std::cout << "WRONG \n"; 
    int r = callback('x'); 
    return r; 
} 

int also_wrong(char c) 
{ 
    return wrong(also_wrong); 
} 

Tabii bu kaçak özyinelemede sonuçlanacaktır, bu yüzden bir sürü sorun sokacak, ama kesinlikle sizin soruya cevap verir: Callbacks C++ böyle uygulanmaktadır.

Ve evet, eğer varsa hepsi 0 dönmekse, bu void döndürerek daha iyi ifade edilen işlev türüdür.

+0

'dan sıfırdan bir demo programı oluşturuyordum. Orada henüz bilmediğim birkaç şey var: C++ 'ya ve genel olarak programlamaya oldukça yeniyim, ama bu şeylere bakacağım. – ticklemyiguana

+1

OP'nin sorununa en iyi çözüm bu değil –

+1

OP'nin ipoteğiyle ilgili sorunları olabilir. Bundan sorumlu değiliz. Bir soru sordu, tam olarak cevap verdim, cevabı kullanırsa ne olacağı konusunda bir uyarı bile ekledim. Sanırım onu ​​ele aldım. –

İlgili konular