2012-03-10 5 views
5

Mi chiedevo se ... fosse considerato un operatore in C++ 11. E se è così, qual è la sua precedenza?In C++ 11, è ... considerato un operatore?

Per esempio, considera questo esempio pessimo e supponiamo ... è un operatore.

template<typename T, typename...Args> 
void foo(T _elm, Args... _args) 
{ 
    bar(something,_args...); 
} 

Come posso sapere se bar saranno disputate con il suo primo parametro essendo something e args... ampliato, o se la sua intenzione di essere eseguito sul risultato di operator,(something, _args...)? (Domanda bonus: può operatori essere sovraccaricato con le mascherine variadic?)

+1

"gli operatori possono essere sovraccaricati con modelli variadici" No. O almeno, non si otterrebbe nulla eseguendolo. Gli operatori prendono sempre un numero specifico di parametri. –

+0

Vedere [this] (http://stackoverflow.com/questions/2396065/c-overloading-operator-comma-for-variadic-arguments). – ApprenticeHacker

+0

@qdii: Heh, nvm :) –

risposta

4

mi chiedevo se ... è stato considerato un operatore in C++ 11

No, ... non è sicuramente considerato un operatore in C++ 11. Se vi ricordate, è stato utilizzato anche nella serie precedente di gestione degli errori

catch(...) 

e anche se non sono sicuro di come il ... viene analizzato e analizzato internamente, è sicuramente non trattato come un operatore.

Gli operatori possono essere sovraccaricati con modelli variadici?

Non ne sono sicuro, ma non credo. Gli operatori devono prendere un set specificato di parametri come:

int operator + (int param1, my_obj param2); 

non credo che avrebbe funzionato con i modelli variadic.