#cpp
templatestruct A { A foo (A , A ) {return A ();} A foo (A,A) {return A();} }; В чём разница между 2 функциями?
Ответы
Ответ 1
Разницы, как таковой, нет. Просто в одном случае шаблонный класс явно параметризован типом T, а в другом - неявно. В этом можно убедиться на соответствующем примере: templatestruct 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 <>.
Комментариев нет:
Отправить комментарий