假设我正在为单链表编写迭代器和 const_iterator。
假设我有以下课程:
template <typename T>
struct Node
{
T value;
Node* next;
}
template <typename T>
struct NodePtr
{
private:
Node<T>* node;
public:
T& operator*() { return node->value; }
const T& operator*() const { return node->value; }
// Ommitted increment, comparison and so on...
}
class Iterator<T, bool isConst>
{
private: NodePtr<T> nodePtr;
using Reference = std::conditional_t<isConst, const T&, T&>;
Reference operator*() { return *nodePtr; }
const Reference operator*() const { return *nodePtr; }
// Ommited
}
我的问题是是否有可能以某种方式替换这些行
Reference operator*() { return node->value; }
const Reference operator*() const { return node->value; }
具有单个定义(可能使用模板参数 isConst)并由编译器推导出 const 说明符?当 isConst = true 时,我希望 * 成为 const T& operator*() const,并且在 isConst = false 时拥有两个版本。可能吗?如果是 - 那么怎么做呢?