一种可能的方法是让重载函数的返回类型存储特定函数的信息:
template<class _ret_t, class _func_t>
struct tpinf
{
using ret_t = _ret_t;
using func_t = _func_t;
ret_t value;
};
tpinf<int, int(*)(double)> func(int n) { ... }
tpinf<int, int(*)(char)> func(char c) { ... }
int main()
{
int n = 56;
using resolved_function_type = decltype(func(n))::func_t;
auto v = func(n).value; // access returned object
return 0;
}
问题是,我可能想知道某些预定义或标准函数的重载得到了解决,因为我必须重写这些函数,这不是一个好主意。那么有没有更有效的方法来实现这一目标呢?
您可以在您想要的重载明确的上下文中获取重载函数的地址。
int func(int);
int func(char);
int main()
{
int n = 56;
int (*pfunc)(decltype(n)) = func; // pfunc is a pointer to 'int func(int)'
return 0;
}