我有一个类Foo
是自引用的树状结构(最少):
class Foo {
public:
// Gets this child's position relative to it's parent.
int getPosition() const {
return parent->indexOf(this);
}
int indexOf(const Foo *const child) const {
return children.indexOf(child); // this line causes an error.
}
private:
Foo *parent;
QList<Foo *> children;
}
该行return children.indexOf(child)
预计const T &value
将按照QList docs传递,这将解析为Foo *const &value
适用于我的场景。
为了让我getPosition()
的方法调用我自己的方法,至少indexOf()
需要一个签名才能从 const 方法传递。(因为这是const Foo *child
this
const Foo *const
)。
但是,我的代码无法编译,因为const Foo *const child
无法转换Foo *const child
为 for QList::indexOf
。我的两种方法都没有修改对象状态,因此它们应该是 const (即我不想取消成本getPosition
来接收非常量this
)。
所以问题是,我如何从this
const 上下文 ( const Foo *const
) 到QList::indexOf
需要的内容。既然我知道我的(和后续调用)不会改变它,我应该this
在里面进行 const 转换吗?getPosition
indexOf
还有什么我应该做的吗?也许我的设计有问题。