【发布时间】:2019-11-05 18:07:55
【问题描述】:
我的代码在本地函数中运行良好:
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);
};
有没有什么方法可以在不指定类型的情况下编写这个默认构造?或者只是以更清洁的方式。
【问题讨论】:
-
为什么?为什么这需要是一个 lambda?
struct SomeName { auto operator() ... };真的这么啰嗦吗? -
我没有得到反对意见,OP 可能走错了方向,可能是 xy 问题,但 x 和 y 都很清楚,问题包含需要回答的所有内容跨度>
-
..也许我把某些东西解释得太快了;)
-
@nicol,是的,我可以在
Divider结构中使用 operator(),但对于同一个结构,我还有其他比较函数。 -
@Jeffrey:“我可以在 Divider 结构中使用 operator()”这不是我的意思。我的意思是
SomeName将是一个不同于Divider的对象,您可以将SomeName传递给有问题的priority_queue。使用 lambda 只会节省很少的击键次数;有什么意义?
标签: c++ class c++11 lambda class-members