gpt4 book ai didi

c++ - 推导给定参数类型的选定重载函数类型

转载 作者:可可西里 更新时间:2023-11-01 17:58:33 25 4
gpt4 key购买 nike

在给定重载集和参数列表的情况下,是否可以确定重载决策将选择的候选函数类型?例如,给定:

char* f(int);
int f(char*);

我希望能够写出这样的东西:

overload<f, short>::type x;

声明一个变量x类型 char* (*)(int) .

这可能吗?我的第一直觉是写这样的东西:

template<typename... Args>
struct overload {
template<typename Ret>
static auto deduce(Ret (*fptr)(Args...)) -> decltype(fptr);
};

...但这无法处理非精确匹配(即 decltype(overload<int>::deduce(f)) 有效,但 decltype(overload<short>::deduce(f)) 无效)。

最佳答案

C++14 通用 lambda 来拯救:

#define wap_function(f) \
[](auto&&... args){ return f(std::forward<decltype(args)>(args)...); }

请注意,此 gem 还解决了一流函数模板的问题:

template<typename Lhs, typename Rhs>
auto add(const Lhs& lhs, const Rhs& rhs)
{
return lhs + rhs;
}

std::accumulate(std::begin(array), std::end(array), 0, wrap_function(add));

关于c++ - 推导给定参数类型的选定重载函数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28733502/

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