gpt4 book ai didi

c++ - 将 lambda 放入类定义中的简洁方法

转载 作者:行者123 更新时间:2023-12-01 19:26:42 24 4
gpt4 key购买 nike

我的代码在本地函数中运行良好:

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);
// ...
}

我现在想将我的 sieve 变量移到一个类中。我可以写出以下怪物:

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 = std::priority_queue < Divider, std::vector<Divider>, decltype(cmp)>(cmp);
};

有什么方法可以编写这个默认构造而无需两次指定类型吗?或者只是以更干净的方式。

最佳答案

Is there any way I can write this default construction without specifying the type twice?

是的,你可以!

使用braced-init-list (或统一启动)初始化 Bar 类的 std::priority_queue 成员。

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
};
<小时/>

或者只需提供 compare functor ,这样您就可以避免将比较器对象传递给 std::priority_queue 的构造函数。

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
};

关于c++ - 将 lambda 放入类定义中的简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58717111/

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