gpt4 book ai didi

c++ - 在函数内部,调用它的重载版本

转载 作者:行者123 更新时间:2023-11-30 02:02:16 25 4
gpt4 key购买 nike

我想知道一件事。我有一个具有 1 个重载成员函数的类:

class A{
public:
class const_iterator{};
class iterator : public const_iterator{};
iterator find(const K &key);
const_iterator find(const K &key) const;
};

广告。迭代器继承自 const_iterator,但它没有添加任何内容。

我想做的是,在正常的 find 中调用 const find。像这样:

typename A::iterator A::find(const K &key){
const_iterator it(find(key));
return (*(iterator*)&it);
}

我不需要非常量查找 ATM 的不同实现。有可能做这样的事情吗?因为现在我进入了无限循环,在查找之前添加“A::”不会改变任何东西。

最佳答案

不幸的是,一般来说,对此没有干净的解决方案。

可以通过简单地将this转换为A const*来调用重载的find——但结果将是错误的类型(const_iterator 而不是 iterator)并且在一般情况下它们之间可能没有转换(您的 (*(iterator*)&it ) 不适用于您的情况。

当然,在您的特殊情况下,由于您定义了这两个类,您可以通过向 iterator 添加适当的构造函数来定义这样的转换:

class iterator : public const_iterator {
iterator(const_iterator const& other) {
// Construct …
}
};

然后你可以重写你的非constfind实现如下:

A::iterator A::find(const int &key){
const_iterator it(const_cast<A const*>(this)->find(key));
return static_cast<iterator>(it);
}

顺便说一句,请注意返回类型中没有typename。由于 A::iterator 不是从属名称,因此您不需要(至少在 C++03 中不允许)在这里使用 typename .

关于c++ - 在函数内部,调用它的重载版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13440670/

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