我有一个带有方法的类,我也希望能够将其用作谓词。
class MyClass {
bool ParticleHasAncestor(const Particle &particle, int id) const;
class AncestorPredicate {
int mId;
public:
AncestorPredicate(int idCode) : mId(idCode) { }
bool operator()(const Particle &particle) const { return ParticleHasAncestor(particle, mId); }
};
};
但是,编译器提示在没有 MyClass 实例的情况下无法使用
ParticleHasAncestor()
。我需要使用 friend 类吗?或者有更好的解决方案吗?我没有使用 C++11,所以不能使用 lambda 函数。
更新:
ParticleHasAncestor()
不能设为静态,因为它使用 MyClass 的成员。 最佳答案
与 Java 不同,在 C++ 中,内部类不拥有指向外部类的指针。MyClass::AncestorPredicate
没有 MyClass
的实例,并且您不能在没有指向该类对象的指针的情况下调用 MyClass
的非静态方法。
您有两个选择:
第一个 。使 MyClass::ParticleHasAncestor
成为 MyClass
的静态方法:
class MyClass {
static bool ParticleHasAncestor(const Particle &particle, int id);
class AncestorPredicate {
int mId;
public:
AncestorPredicate(int idCode) : mId(idCode) { }
bool operator()(const Particle &particle) const
{
return MyClass::ParticleHasAncestor(particle, mId);
}
};
};
第二个 。创建
MyClass
的实例并将指针传递给 AncestorPredicate
,以便您可以在该对象上调用 ParticleHasAncestor
:class MyClass {
bool ParticleHasAncestor(const Particle &particle, int id) const;
class AncestorPredicate {
int mId;
const MyClass* obj;
public:
AncestorPredicate(int idCode, const MyClass* _obj) : mId(idCode), obj( _obj ) { }
bool operator()(const Particle &particle) const
{
return obj -> ParticleHasAncestor(particle, mId);
}
};
};
关于c++ - 在类中定义谓词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18509784/