gpt4 book ai didi

c++ - 函数的C++运算符重载

转载 作者:行者123 更新时间:2023-12-02 10:21:48 25 4
gpt4 key购买 nike

我正在编写一个程序,希望该程序最终能够对double-double函数(通过double-double函数)执行一些标准操作(例如+,-,*),我的意思是指带有一个double类型值的事物并吐出其他类型为double的内容,无论这些内容是硬编码还是lambda)。因此,我希望提供以下示例:

#include <functional>

double f(double x)
{
return x + 5;
}

double g(double x)
{
return 2 * x;
}

int main()
{
std::function<double(double)> h = f + g;
std::function<double(double)> h_ = (f - g) * 5;
std::function<double(double)> h__ = f * g;

return 0;
}

我已经尝试过类似以下形式的内容,但是编译器似乎仍然不喜欢我将 double(double)类型的两件事加在一起。

std::function<double(double)> operator+(std::function<double(double)> &f, std::function<double(double)> &g)
{
return [=](double x)->double{ return f(x) + g(x); };
}

有什么明显的我想念的东西可以帮助它工作吗?作为当前的解决方法,我正在调用form的函数并使用正确的参数调用它,但是我无法使其自然地与运算符一起工作。

std::function<double(double)> add_two_functions(std::function<double(double)> &f, std::function<double(double)> &g)
{
return [=](double x)->double{ return f(x) + g(x); };
}

最佳答案

您的错误是fg是函数指针,因此operator+无法应用于它们。您需要将这些函数指针转换为std::function<double(double)>对象。

像下面这样的东西会起作用:

#include <iostream>
#include <functional>

double f(double x) {
return x + 5;
}

double g(double x) {
return 2 * x;
}

std::function<double(double)> operator+(std::function<double(double)> const& f,
std::function<double(double)> const& g) {
return [=](double x) -> double {
return f(x) + g(x);
};
}

int main() {
using FuncType = double(double);
std::function<FuncType> a{ reinterpret_cast<FuncType*>(f) };
std::function<FuncType> b{ reinterpret_cast<FuncType*>(g) };

auto h = a + b;

std::cout << h(2.0) << std::endl; // 11
return 0;
}

检查 live example

关于c++ - 函数的C++运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59864850/

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