2010-10-21 9 views
10

Quando sottoclasse in ogg-c, come posso inoltrare una chiamata alla superclasse nel caso di un metodo variadico. Da cosa dovrei sostituire il ??? qui sotto per inviare tutti gli oggetti che ho ricevuto?Sovrascrittura di un metodo variadic in ogg-c

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

risposta

7

Non è possibile. Per passare in sicurezza tutti gli argomenti variadici, è necessario un metodo per accettare uno va_list.

In super,

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

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

E utilizzare [super appendObjectsWithArguments:vl] quando l'override del metodo nella sottoclasse.

0

Prova questa:

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

Se questo non fare il trucco, leggere le pagine di manuale su varargs.

+1

che non funzionerà, sarà solo passare "args" come unico parametro per appendObjects (e probabilmente causare un guasto per giunta). –

Problemi correlati