gpt4 book ai didi

c++ - 为 boost::shared_ptr 命名一个 typedef

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

愚蠢的问题,但假设你有 Foo 类:

class Foo
{
public:
typedef boost::shared_ptr<Foo> RcPtr;

void non_const_method() {}
void const_method() const {}
};

拥有一个 const Foo::RcPtr 并不会阻止在类上调用非 const 方法,以下将编译:

#include <boost/shared_ptr.hpp>

int main()
{
const Foo::RcPtr const_foo_ptr(new Foo);
const_foo_ptr->non_const_method();
const_foo_ptr->const_method();

return 0;
}

但对我来说,命名 typedef ConstRcPtr 意味着 typedef 将是

typedef const boost::shared_ptr<Foo> ConstRcPtr;

这不是我感兴趣的。一个更奇怪但可能更准确的名字是 RcPtrConst:

typedef boost::shared_ptr<const Foo> RcPtrConst;

但是,谷歌搜索 RcPtrConst 的结果为零,因此人们不会将其用作 typedef 名称:)

还有其他建议吗?

最佳答案

typedef 的名称不代表用于定义其类型的语法结构。 typedef 名称应该传达一些它想要的含义。例如,标准定义了 const T 上的迭代器名称作为const_iterator ,即使迭代器本身不是 const(您仍然可以递增它)。事实上,迭代器的全部目的就是改变它,以便迭代一个序列:)

typedef T const* const_iterator;

对于指针,我个人认为没有什么理由通常将它们定义为常量。所以 Const在尾部前面可以传达与迭代器相同的含义,并且将遵循现有实践。所以我认为你去说完全没问题

typedef boost::shared_ptr<Foo const> ConstRcPtr;

其实是这样的std::allocator<>::const_pointer也是措辞。

关于c++ - 为 boost::shared_ptr<const Foo> 命名一个 typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2851517/

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