gpt4 book ai didi

c++ - 在 C++ 中,greater_equal 有一种函数类型

转载 作者:行者123 更新时间:2023-12-01 14:18:07 24 4
gpt4 key购买 nike

我的理解是greater_equal<double>是一个签名为 function<bool (double, double)> 的仿函数,所以我尝试执行以下操作,

#include <functional>
#include <memory>

using namespace std;

int main() {
std::shared_ptr<std::function<bool (double, double)>> f;
auto f1 =make_shared<greater_equal<double>>();
auto f2 = make_shared<less_equal<double>>();
f = f1;
}

令我惊讶的是,这不会编译,因为,

'': cannot convert from 'conststd::shared_ptrstd::greater_equal<double>' to'std::shared_ptr<std::function<bool (double,double)>>'

不知道为什么我需要的是类似于上面代码片段中的精神,我将有一个成员功能字段,std::shared_ptr<std::function<bool (double, double)>>我需要分配 <greater_equal<double>less_equal<double>基于某种条件,我应该如何实现?

最佳答案

如果std::greater_equal<double>,你写的会起作用和 std::less_equal<double>继承自 std::function<bool(double, double)> ,他们不这样做。

但是自std::function<bool(double, double)可以从 std::greater_equal<double> 的实例构造(和 less_equal ),您可以改为这样做:

auto f1 = std::make_shared<std::function<bool(double, double)>>(std::greater_equal<double>{});

但我不认为你想要std::function首先。

greater_equal<double> is a functor that has a signature of function<bool (double, double)>

是的,它是 operator()(double, double)参数和返回 bool , 但与 std::function 无关.

std::function是一个包装类,可以存储它认为可调用的任何对象。它接受签名的细微变化(例如,即使 less/greater_equal 通过 const 引用接受参数,并且您告诉 std::function 参数应按值传递,它仍然有效),并且它可以存储具有状态的对象(具有数据成员).这些功能来自 with an overhead .


判断

I need to assign either greater_equal<double> or less_equal<double> base on some condition

这些你都不需要 std::function特点。

您可以使用函数指针(它需要签名完全匹配,并且不能存储任何状态):

bool (*ptr)(double, double) = [](double a, double b)
{
return a <= b;
};

关于c++ - 在 C++ 中,greater_equal<double> 有一种函数类型<bool (double, double)>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63699663/

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