2012-05-24 24 views

cevap

9

Ad zaten bir türden başvuruyorsa, typedef kimlikine izin verilir.

Bu yasaldır:

typedef int Request; 
typedef Request Request; // Redefines "Request" with no effect 

Bu değil:

typedef Request Request; // Illegal, first "Request" doesn't name a type. 

standart bu ilgilendiren belli bir örnek vardır. C++ 2003 §7.1.3/2:

Belirli olmayan sınıf kapsamında

, Typedef belirteci kapsamı türe atıfta bu beyan herhangi bir tür adı yeniden tanımlamak için kullanılabilir zaten başvuruyor. [Örnek:

typedef struct s { /* ... */ } s; 
typedef int I; 
typedef int I; 
typedef I I; 

- uç örneği]

+0

Aralarındaki fark nedir? Yazının yeterince açık değil, aynı typedef'i iki kez görüyorum, ama bunlardan biri yasal, diğeri değil. – Nawaz

+0

İlk bloğum ve ikinci bloğum arasındaki fark, "İstek" in önceki tanımıdır. –

0

iseRequest sadece bir opaque pointer gibi görünen bir parametre olarak geçirilir.
yerde kodunda bir

typedef struct Request Request 

olmalıdır. (sorunuz hakkındaki yorumlara bakın)
Bu, bir API tanımlamak ve uygulama ayrıntılarını gizlemek için kullanılır. Böylece, API'yi tekrar değiştirmeden uygulamayı değiştirebilirsiniz.

İstemcinin acutal türüyle ilgili herhangi bir şey bilmesine gerek yoktur - onun sadece bir kolu.
Bunu yapmak istediğiniz her şey api yöntemleri (oluşturma, silme, yükleme, init, ...) ile yapılmalıdır.
Genellikle api uygulamasında Request tanıtıcısı daha anlamlı bir şeye dönüştürülecektir. Bu, genellikle eski C ile yapılmıştır.