Страницы

Поиск по вопросам

среда, 24 октября 2018 г.

в чем разница между двумя функциями

template struct A { A foo (A, A) {return A();} A foo (A,A) {return A();} };
В чём разница между 2 функциями?


Ответ

Разницы, как таковой, нет. Просто в одном случае шаблонный класс явно параметризован типом T, а в другом - неявно. В этом можно убедиться на соответствующем примере:
template struct A { A foo (A, A) {return A();} A foo (A,A) {return A();} };
int main() { A a; a.foo(a,a); }
При компиляции будет выведена ошибка:
error: class member cannot be redeclared
Т.е. компилятор посчитал функции идентичными.
При этом использование краткого имени в данном случае предпочтительнее, т.к. не зависит от изменения имени шаблонного параметра или их кол-ва.

В Стандарте языка данный момент описан в п.14.6.1/1
Like normal (non-template) classes, class templates have an injected-class-name (Clause 9). [...] is equivalent to the template-name followed by the template-parameters of the class template enclosed in <>.

Комментариев нет:

Отправить комментарий