gpt4 book ai didi

c++ - 使用 const-ref getter 的 const_cast 实现引用 getter 的陷阱

转载 作者:太空狗 更新时间:2023-10-29 20:35:23 26 4
gpt4 key购买 nike

我有一个类,比方说,vector<T> .我想实现两个getter方法,返回T&const T&分别。我不想同时实现它们。相反,我只想实现 const 版本,然后使用 const_cast 在非 const 方法中重用它的代码。 .

template<typename T>
class Vector {
public:
T& operator[](size_t i) {
return const_cast<T&>(
static_cast<const Vector<T>*>(this)->operator[](i));
}

const T& operator[](size_t i) const {
return data[i];
}

private:
T* data;
};

这种方法可能存在哪些缺陷?或者,是否有任何方法可以检查 const_cast 在任何具体情况下是否合法?

最后,处理此类重复的 const/non-const 代码的常用方法有哪些?

最佳答案

一种干净的方法是委托(delegate)给一个私有(private)模板函数,它可以推断出 this 的常量性:

#include <cstdint>

template<typename T>
class Vector {
public:
T& operator[](std::size_t i) {
return impl_indirection(this, i);
}

const T& operator[](std::size_t i) const {
return impl_indirection(this, i);
}

private:
template<class MaybeConstVector>
static decltype(auto) impl_indirection(MaybeConstVector* pv, std::size_t index)
{
return pv->data[index];
}

T* data;
};

关于c++ - 使用 const-ref getter 的 const_cast 实现引用 getter 的陷阱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42808245/

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