2010-10-21 12 views
10

En sous-classe dans l'objectif-c, comment puis-je transférer un appel à la superclasse dans le cas d'une méthode variadique. Par quoi devrais-je remplacer le ??? ci-dessous pour envoyer tous les objets que j'ai?Substitution d'une méthode variadique dans objectif-c

- (void) appendObjects:(id) firstObject, ... 
{ 
    [super appendObjects: ???]; 
} 

Répondre

7

Vous ne pouvez pas. Pour passer en toute sécurité tous les arguments variadiques, vous avez besoin d'une méthode pour accepter un va_list.

En super

-(void)appendObjectsWithArguments:(va_list)vl { 
    ... 
} 

-(void)appendObject:(id)firstObject, ... 
    va_list vl; 
    va_start(vl, firstObject); 
    [self appendObjectsWithArguments:vl]; 
    va_end(vl); 
} 

Et utiliser [super appendObjectsWithArguments:vl] lorsque vous substituez la méthode dans la sous-classe.

0

Essayez ceci:

- (void) appendObjects:(id) firstObject, ... 
{ 
    va_list args = &firstObject; 
    [super appendObjects: args]; 
} 

Si cela ne fait pas l'affaire, lisez les pages de manuel sur varargs.

+1

Cela ne fonctionne pas, il va juste passer « args » comme un seul paramètre à appendObjects (et probablement provoquer un défaut dans le marché). –