字符串"companion types"

String "companion types"

本文关键字:types companion 字符串      更新时间:2023-10-16

一本书讨论了string::size_type(这是std::string类的string.size()函数的返回类型)。

我不明白这些"伴侣类型"是什么。有人可以给我一个详细的解释一下它们是什么吗?我们如何访问它们?我们如何在类中创建它们?我听说它们是某种类型别名,怎么样?我在网上找不到任何这些信息。

std::string 类型(以及其他序列容器)具有一堆关联的类型。例如,有 string::iterator ,一种可以迭代字符串中的字符的类型。

string::size_type类型是能够容纳字符串大小的某种类型。你可以通过编写这样的东西来使用它:

string::size_type size = myString.size(); // Or something else

很少看到人们在日常编程实践中实际使用这种类型。大多数人只是在这里使用size_tauto

string::size_type类型存在的原因是,处理序列容器的模板函数可以接受模板参数,然后从中提取有用的信息,如下所示:

template <typename Sequence> void doSomething(const Sequence& seq) {
    typename Sequence::size_type size = seq.size();
    ...
}

不过,您可能不会很快做这样的事情,因此请随意使用size_t或类似的东西。

Companion types可能只是提及member types的比喻方式,即在另一种类型中声明的类型

例如,字符串有一堆以及size_type

你是对的,它们是使用 typedefusing 创建的类型别名(自 c++11 以来)

例如,foo有两种companion类型,但由于可见性,用户只能访问一种

class foo
{
public:
    using bar = int;
private:
    struct internal { /* impl */};
    ...
    typedef internal baz;
}

现在,任何人都可以实例化foo::bar类型的变量,并且它还允许foo(或std::string)的作者稍后更改成员类型,而无需重写代码,只要您始终如一地使用它们。