我的理解是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;
}
出乎我的意料,这段代码无法编译。错误信息如下:
我不确定原因是什么。我的需求类似于上面的片段,我需要一个函数成员字段:'':无法将“const std::shared_ptrstd::greater_equal<double>”转换为“std::shared_ptr<std::function<bool(double,double)>>”
std::shared_ptr<std::function<bool (double, double)>>
,并且我需要根据某些条件分配<greater_equal<double>
或less_equal<double>
。我应该如何实现这个要求?
operator()
的类型,它不能隐式转换为std::function
。如果你想要这样做,你需要一个 lambda。如果你知道实际的咒语,重载的运算符可能是可转换的,但对象本身不是 lambda。 - Tanveer Badarshared_ptr
上。您可以将std::greater_equal
存储到std::function<bool(double, double)>
中。但是在shared_ptr
的构造/赋值中,您只能使用具有兼容指针的对象,而这不是您的情况。 - Daniel Langrstd::function
有相应的(非显式)转换构造函数,所以它是可转换的。您可以轻松编写std::function<bool(double, double)> f = std::greater_equal<double>{};
。 - Daniel Langr