gpt4 book ai didi

c++ - 标准功能的组成

转载 作者:行者123 更新时间:2023-12-03 06:52:14 26 4
gpt4 key购买 nike

我正在尝试创建一个函数 'compose' 返回作为参数给出的可调用对象的组合。
在数学中,这将是以下内容:

F = h(g(f(x)))
这是 C++ 中的实现:
template <typename F>
auto compose(F&& f)
{
return[f = std::forward<F>(f)](auto&&... args){
return f(std::forward<decltype(args)>(args)...);
};
}

template <typename F, typename G, typename... Functions>
auto compose(F&& f, G&& g, Functions&&... functions)
{
return compose(
[f = std::forward<F>(f), g = std::forward<G>(g)](auto&&... args)
{
return f(g(std::forward<decltype(args)>(args)...));
},
std::forward<Functions>(functions)...);
}
如果我提供 lambda 函数作为参数,这就像一个魅力:
auto f = compose(
[](auto value) { return std::sin(value); },
[](auto value) { return std::asin(value); }
);
但是,如果我使用标准中的直接重载函数(没有将它们封装在 lambda 中),编译器无法推断选择哪个重载来实例化模板:
auto g = compose(
std::sin,
std::asin
);
这里使用 Microsoft C++ 编译器的错误:
error C2672: 'compose': no matching overloaded function found
error C2783: 'auto compose(F &&,G &&,Functions &&...)': could not deduce template argument for 'F'
message : see declaration of 'compose'
error C2783: 'auto compose(F &&,G &&,Functions &&...)': could not deduce template argument for 'G'
message : see declaration of 'compose'
error C2780: 'auto compose(F &&)': expects 1 arguments - 2 provided
message : see declaration of 'compose'
有没有办法声明我们在创建组合函数时要使用的函数类型(std::sin 和 std::asin)?

最佳答案

路过怎么样(double (&)(double)) std ::sin ?

关于c++ - 标准功能的组成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63870206/

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