Сообщение Re: перегрузка или специализация? от 06.05.2020 8:39
Изменено 06.05.2020 8:44 rg45
Re: перегрузка или специализация?
Здравствуйте, niXman, Вы писали:
X>привет!
X>возник такой теоритический вопрос: чем в данном случае являются пункты 2 и 3, и является ли 3 перегрузкой 2?
X>
Все три варианта, включая шаблонный, являются перегрузками по отношению друг к другу. Вот если ты добавишь template<> перед вариантами 2 и 3, тогда они станут специализациями.
P.S. Есть простой способ проверки — меняешь тип возвращаемого результата так, чтоб он противоречил primary template declaration. Если компилятор не возражает, значит перегрузка, а если выдал ошибку, то по тексту ошибки должно быть все понятно
X>привет!
X>возник такой теоритический вопрос: чем в данном случае являются пункты 2 и 3, и является ли 3 перегрузкой 2?
X>
X>template<typename T>
X>T sum(const T *beg, const T *end); // 1
X>int sum(const int *beg, const int *end); // 2
X>double sum(const double *beg, const double *end); // 3
X>
Все три варианта, включая шаблонный, являются перегрузками по отношению друг к другу. Вот если ты добавишь template<> перед вариантами 2 и 3, тогда они станут специализациями.
P.S. Есть простой способ проверки — меняешь тип возвращаемого результата так, чтоб он противоречил primary template declaration. Если компилятор не возражает, значит перегрузка, а если выдал ошибку, то по тексту ошибки должно быть все понятно
Re: перегрузка или специализация?
Здравствуйте, niXman, Вы писали:
X>привет!
X>возник такой теоритический вопрос: чем в данном случае являются пункты 2 и 3, и является ли 3 перегрузкой 2?
X>
Все три варианта, включая шаблонный, являются перегрузками по отношению друг к другу. Вот если ты добавишь template<> перед вариантами 2 и 3, тогда они станут специализациями.
P.S. Есть простой способ проверки — меняешь тип возвращаемого значения так, чтоб он противоречил primary template declaration. Если компилятор не возражает, значит перегрузка, а если выдал ошибку, то по тексту ошибки должно быть все понятно
X>привет!
X>возник такой теоритический вопрос: чем в данном случае являются пункты 2 и 3, и является ли 3 перегрузкой 2?
X>
X>template<typename T>
X>T sum(const T *beg, const T *end); // 1
X>int sum(const int *beg, const int *end); // 2
X>double sum(const double *beg, const double *end); // 3
X>
Все три варианта, включая шаблонный, являются перегрузками по отношению друг к другу. Вот если ты добавишь template<> перед вариантами 2 и 3, тогда они станут специализациями.
P.S. Есть простой способ проверки — меняешь тип возвращаемого значения так, чтоб он противоречил primary template declaration. Если компилятор не возражает, значит перегрузка, а если выдал ошибку, то по тексту ошибки должно быть все понятно