2012-03-10 4 views
5

Мне было интересно, был ли ... считался оператором в C++ 11. И если это так, каков его приоритет?В C++ 11, ... считается оператором?

Например, рассмотрим этот довольно плохой пример и предположим ... это оператор.

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

Как я могу знать, будет ли bar быть запущен с его первым параметром является something и args... расширенной, или если это собиралось будет работать на результат operator,(something, _args...)? (Бонус вопрос: можно ли операторы быть перегружены с переменным числом шаблонов?)

+1

«Операторы могут быть перегружены вариативными шаблонами» Нет. Или, по крайней мере, вы ничего не получите, сделав это. Операторы всегда принимают определенное количество параметров. –

+0

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

+0

@qdii: Heh, nvm :) –

ответ

4

мне было интересно ли ... был рассмотрен оператор в C++ 11

Нет, ..., безусловно, не считается оператором в C++ 11. Если вы помните, он был также использован в предыдущем стандарте в обработке ошибок

catch(...) 

и хотя я не знаю, как ... анализируется и анализируется внутри, это, безусловно, не рассматривается в качестве оператора.

Могут ли операторы перегружаться вариативными шаблонами?

Я не уверен, но я так не думаю. Операторы должны принимать заданный набор параметров, таких как:

int operator + (int param1, my_obj param2); 

Я не думаю, что это сработает с вариационными шаблонами.

Смежные вопросы