如何从嵌套类实例内部引用封闭类成员变量



作为某个类A的类成员,我想维护一个存储Bs的std::set。该集合使用一个自定义比较对象,该对象需要读取非静态类成员,即下面示例代码中的m_t,以执行其比较。

示例代码:

class B { ... };
class A {
struct Comp {
bool operator()(B b1, B b2) const {
// ... compares b1 and b2, uses m_t
}
};
std::set<B, Comp> m_set;
double m_t;
};

不幸的是,这并没有编译,因为可以理解的是,我们无法访问CompA的非静态成员。有其他方法可以做到这一点吗?我希望避免将m_t设置为静态。

(上下文的一些背景:这是为了实现扫描线算法。具体来说,B实现了一个依赖于m_t的函数,其中m_t在0和1之间变化。函数在[0,1]内不相交,因此Bs之间的比较永远不会改变,从而保持std::set的有效性。对于给定m_t的sweepline,然后我需要用给定的值查询它周围的集合中的函数。(

编辑:我已经看到了这个问题,现在它被标记为重复到,使用自定义std::set comparator。那里的答案确实解释了如何制作自定义比较器,但与引用另一个类成员无关。

Comp只是一个C++类,因此您可以根据需要使用任何数据对其进行补充。例如,指向封闭类实例的指针:

struct A {

struct Comp {
A *host;

bool operator()(B b1, B b2) const {
std::cout << host->m_t << std::endl;
// ...m_t is accessible here
}
};

double m_t;
std::set<B, Comp> m_set{ Comp { this } };

};

相关内容

  • 没有找到相关文章

最新更新