C++ 模板函数可以重载返回参数吗?

Tro*_*yvs 3 c++ templates types overloading return

使用相同的模板声明,是否可以区分具有相同名称、相同参数列表但返回类型不同的两个函数?

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

template <class T>
short f()...
Run Code Online (Sandbox Code Playgroud)

或者,需要一些特殊的代码来实现这一点?

谢谢。

Jar*_*d42 5

您确实可以拥有具有相同名称、相同参数类型和相同返回类型的函数模板(但对于常规函数则不能)。

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

template <class T>
short f() {/*..*/}
Run Code Online (Sandbox Code Playgroud)

但是他们的使用并不是很容易/很好:

auto i = static_cast<int(*)()>(&f<float>)(); // Call int f<float>
auto s = static_cast<short(*)()>(&f<float>)(); // Call short f<float>
Run Code Online (Sandbox Code Playgroud)