C++

2011-10-27 9 views
5

'daki şablon türü parametreleriyle ilgili olarak, buradaki bazı soruları inceledim ve şablonlanmış nesne için type parametresi olarak type void olarak türetilen bir tamsayıyı geçen (örnek olarak görünen) bir örnek kod buldum. Burada ne demek istediğimi bir örnek: Birisi "void (int)" kod ve ne yapar bir kısmını açıklayabilir eğerC++

SomeRandomObject<void(int)> Object; 

bunu takdir ediyorum.

cevap

7

Bu tür "int alır ve void döndürür" işlevidir.

+0

Tamam. Yardım için teşekkürler. –

2

Tür, bir işlev türüdür. buna bu tür değişkenleri veya referanslar ilan edemeyeceğini, çünkü sadece kendileri türleri var

typedef int (ft)(void); // Huh? (raw function type) 
typedef ft *fp;   // ??? (pointer to function) 

typedef int (*fp_oldstyle)(void); // Ahh... (same as fp) 

Fonksiyonlar ama: Artık kadar sadece işaretçi türlerinde kullanıldığı için kullanılabilir, onunla çok tanıdık olmayabilir Genellikle kullanacağınız şey, son satırdaki bilinen sözdiziminde bildirilen işaretçilerdir. int foo(void);, foo ve &foo işlevlerinin her ikisi için işaretçi olarak yorumlanır, bu nedenle "raw" işlev türü ft'a gerek yoktur. Bununla birlikte, std::function, std::bind ve lambda'ları çevreleyen yeni şablon büyüsü ile şablon parametrelerinde çıplak işlev türlerini görmek artık çok daha yaygın bir şeydir.

+0

Fonksiyon referansına sahip olmak mümkündür. – AraK

+0

@AraK: Ah, bu doğru: ft & f = foo; f() ;. Teşekkürler! Yine de çok kullanılmıyor gibi görünüyor; Referansların yeniden atanabilir olmadığından dolayı farz ediyorum. –

+0

Katılıyorum, nadiren gördüm. İlgili benim soru: http://stackoverflow.com/questions/1516958/could-someone-please-explain-the-difference-between-a-reference-and-a-pointer – AraK