C++ 将lambda放入类定义中的干净方法
我的代码在本地函数中运行良好:C++ 将lambda放入类定义中的干净方法,c++,class,c++11,lambda,class-members,C++,Class,C++11,Lambda,Class Members,我的代码在本地函数中运行良好: struct Divider { public: size_t factor; size_t next; }; void foo() { auto cmp = [](const Divider& x, const Divider& y) { return x.next > y.next; }; std::priority_queue < Divider, std::vector<Divider&g
struct Divider
{
public:
size_t factor;
size_t next;
};
void foo()
{
auto cmp = [](const Divider& x, const Divider& y) { return x.next > y.next; };
std::priority_queue < Divider, std::vector<Divider>, decltype(cmp)> sieve(cmp);
// ...
}
有没有任何方法可以在不指定两次类型的情况下编写此默认构造?或者只是以更干净的方式
有没有什么方法可以编写这个默认的构造而不用
指定类型两次
是的,你可以
使用(或统一初始化)初始化std::priority_队列Bar
类的成员
class Bar
{
inline static auto cmp
= [](const Divider& x, const Divider& y) { return x.next > y.next; };
std::priority_queue<Divider, std::vector<Divider>, decltype(cmp)> sieve{ cmp };
// ^^^^^^^^^^^^^ >> like this
};
为了完整起见,并提供一个按字面理解标题中问题的答案,您可以让成员函数返回lambda:
#include <iostream>
struct Bar {
auto get_compare(){
return [](){ std::cout << "hello world";};
}
};
int main(){
Bar b;
b.get_compare()();
}
#包括
结构条{
自动获取_比较(){
return[](){std::cout Why?为什么这需要是lambda?Isstruct SomeName{auto operator()…}
真的这么冗长吗?我没有得到反对票,OP可能走错了方向,可能是xy问题,但x和y都很清楚,问题包含了所有需要回答的内容。也许我只是太快了,把一些东西解释成了什么都没有;)@nicol,是的,我可以使用操作符()在Divider
struct中,但我有其他用于同一结构的比较函数。@Jeffrey:“我可以在Divider结构中使用运算符()这不是我的意思。我的意思是SomeName
将是一个不同于Divider
的对象,并且您将SomeName
传递给所讨论的priority\u队列
。使用lambda只会节省很少的击键次数;这有什么意义?
class Bar
{
struct Compare final // compare functor
{
bool operator()(const Divider& x, const Divider& y) const {
return x.next > y.next;
}
};
std::priority_queue<Divider, std::vector<Divider>, Compare> sieve;
// ^^^^^^^^^^^^^^^^^ >> like this
};
#include <iostream>
struct Bar {
auto get_compare(){
return [](){ std::cout << "hello world";};
}
};
int main(){
Bar b;
b.get_compare()();
}