Может ли C ++ функция шаблона перегружаться на возвращаемый параметр? - PullRequest
3 голосов
/ 03 марта 2020

При одном и том же объявлении шаблона возможно ли отличить две функции с одинаковым именем, одним и тем же списком параметров, но с разным типом возвращаемого значения?

template <class T>
int f()...

template <class T>
short f()...

Или вам нужен специальный код для достижения этой цели?

Спасибо.

1 Ответ

5 голосов
/ 03 марта 2020

У вас действительно могут быть шаблоны функций с одинаковыми именами, одинаковыми типами параметров и одинаковым типом возврата (но вы не можете использовать обычные функции).

template <class T>
int f() {/*..*/}

template <class T>
short f() {/*..*/}

Но тогда их использование не очень просто / хорошо:

auto i = static_cast<int(*)()>(&f<float>)(); // Call int f<float>
auto s = static_cast<short(*)()>(&f<float>)(); // Call short f<float>
...