gpt4 book ai didi

c++ - 在第三方库中正确使用 const_cast

转载 作者:太空宇宙 更新时间:2023-11-04 12:49:57 25 4
gpt4 key购买 nike

我有一个大型库,它实现了一些不可变的数据结构。可以想象,其中几乎所有内容都是 const合格的。有一些选择部分不是 const,例如引用计数器。为了处理嵌入结构中的引用计数器,这些引用计数器只能通过 const 访问。方法和指针,mutable使用关键字。下面的示例 Node .这很好用,我对文档的阅读表明这很好。

我面临的问题是我还想使用 Boost.Intrusive 容器跟踪数据结构的某些部分,但这些容器没有常量方法。

boost::intrusive::list my_bi_list; // as an example

struct Node {
mutable boost::intrusive::list_member_hook<> bi_hook;
mutable std::atomic<int> refcount;

// const T a;
// const T b;
// ...

inline void put() const {
...
my_bi_list.push_back(*this); // PROBLEM here
}
};

Node以上,*this用来放当前Node侵入列表上的实例,但该接口(interface)采用非 const引用,导致您的标准 C++ 限定符丢弃错误。

我一直在阅读 const_cast (例如 push_back(const_cast<Node&>(*this) ),但即使在阅读了我发现我正在冒险进入未定义行为领域的文档之后,它也不是很清楚。

这里的任何指导将不胜感激(尤其是任何完全避免这种情况的技术!)

谢谢

最佳答案

使用boost::cref(x) :

boost::cref(x) returns a boost::reference_wrapper(x)

这样,您就可以使用 boost 的引用库并进行隐式转换。

关于c++ - 在第三方库中正确使用 const_cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49484695/

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