在 C++ 中 greater_equal<double> 有一种函数类型 <bool (double, double)>
In c++ does greater_equal<double> have a type of function<bool (double, double)>
我的理解是 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 'const
std::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)
参数和 returns bool
,但它与 std::function
.
无关
std::function
是一个包装器 class,可以存储它认为可调用的任何对象。它接受签名的细微变化(例如,即使 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
您需要 none 这些 std::function
功能。
您可以使用函数指针(它需要签名完全匹配,并且不能存储任何状态):
bool (*ptr)(double, double) = [](double a, double b)
{
return a <= b;
};
我的理解是 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 'const std::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 offunction<bool (double, double)>
是的,它的 operator()
有 (double, double)
参数和 returns bool
,但它与 std::function
.
std::function
是一个包装器 class,可以存储它认为可调用的任何对象。它接受签名的细微变化(例如,即使 less/greater_equal
通过 const 引用接受参数,并且您告诉 std::function
参数应该按值传递,它仍然有效),并且它可以存储具有状态的对象(与数据成员)。这些功能来自 with an overhead.
根据
判断I need to assign either
greater_equal<double>
orless_equal<double>
base on some condition
您需要 none 这些 std::function
功能。
您可以使用函数指针(它需要签名完全匹配,并且不能存储任何状态):
bool (*ptr)(double, double) = [](double a, double b)
{
return a <= b;
};