gpt4 book ai didi

c++ - 仅通过其参数查找重载地址

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:46:51 24 4
gpt4 key购买 nike

假设一个函数(可以是全局函数或成员函数)仅在其参数上重载(因此它的重载将始终全部为 const 或全部为非 const)。有没有办法编写一个模板,根据指定的参数选择一个重载地址?例如:

struct Foo {
double bar(double n, double m);
int bar(int n, int m);
};

auto addressDouble = find_overload<&Foo::bar, double, double>::address;
auto addressInt = find_overload<&Foo::bar, int, int>::address;

我发现的一个有趣的答案是 here ,但不幸的是,它只处理将调用转发到正确的重载,而不是实际获取重载地址以便稍后使用。

最后一点:完美的解决方案应该适用于已发布的 Clang 版本。除此要求外,还可以使用任何可用的 C++1z 功能和更低版本。

最佳答案

在您可以访问重载函数的地址之前,您必须指定您需要哪个版本。

template<typename ...TA>
struct find_overload
{
template<typename TObj, typename TR>
using member_func_t = TR(TObj::*)(TA...);

template< typename TObj, typename TR >
static constexpr auto get_address(member_func_t<TObj, TR> func) -> member_func_t<TObj, TR>
{
return func;
}
};

int main()
{
constexpr auto address = find_overload<double, double>::get_address(&Foo::bar);
}

关于c++ - 仅通过其参数查找重载地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41661053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com