Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将lambda放入类定义中的干净方法_C++_Class_C++11_Lambda_Class Members - Fatal编程技术网

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?Is
struct 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()();
}