有没有办法在编译时知道正在调用哪个版本的重载函数?

问题描述 投票:0回答:1

一种可能的方法是让重载函数的返回类型存储特定函数的信息:

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;
}

问题是,我可能想知道某些预定义或标准函数的重载得到了解决,因为我必须重写这些函数,这不是一个好主意。那么有没有更有效的方法来实现这一目标呢?

c++ overloading overload-resolution
1个回答
2
投票

您可以在您想要的重载明确的上下文中获取重载函数的地址。

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.