【问题标题】:c++ renaming the STL vector with another name [duplicate]c ++用另一个名称重命名STL向量[重复]
【发布时间】:2019-01-07 22:40:21
【问题描述】:

我能澄清一下下面的 C++ 代码吗?它创建一个名为gSequence 的函数的函数模板。我试图了解返回类型dyn_vector

dyn_vector 只是重命名了起始 STL 向量吗?

template <class T>
using dync_vector = std::vector<T>;

template <class T_data>
dyn_vector<T_data> gSequence(size_type dataSize)
{
    dyn_vector<T_data> result(dataSize);

    return result;

}

【问题讨论】:

  • dync_vectordyn_vector?这让我怀疑你的代码示例有点过于虚构。
  • @StoryTeller:拜托,我确定这只是一个错字。
  • 我们对这些东西有一个特殊的术语,“类型别名”(或者不那么现代的“typedef name”)。
  • @einpoklum - 错字不相信这个例子代表了 OP 面临的任何问题。让他们解决这个问题,可以提供更适合他们实际需求的解决方案。在这方面,您的“修复”实际上可能对 OP 不利。
  • @NathanOliver - 因为 OP 似乎没有注意到存在的错字,再次暗示他们编写的代码仅用于发布,而不是具体的代表性示例。就像我对 einpoklum 说的那样,为他们修复它可能会损害他们获得的帮助。

标签: c++ templates vector


【解决方案1】:

这不是重新定义。作为@n.m。建议,它是一个(模板化的)类型别名,有点。

首先,让我们忘记模板。假设我要参加考试,并且我使用int 值作为学生的成绩。我可以写:

typedef int grade_t;

之后,我将使用grade_t 来表示将某事视为考试成绩的变量或参数。现在,编译器只会让这些函数采用int,但是当我们阅读代码时,我们会更好地了解其含义。此外,如果我们想更改成绩类型(例如,允许分数成绩值),这将对我们有所帮助。

好的,这是一个类型别名 - 这是您可能已经知道的非常基本的东西。那using 业务呢?嗯,是一样的东西……也就是说,语句:

using grade_t = int;

与我上面列出的typedef 语句的含义完全相同。它是 C++ 中更现代的语法(2011 年采用)。

现在模板又回到了画面中。 std::vector 是一个类模板(因此是一个类型模板),而不是一个类型本身。它有两个参数,设置后会为我们提供具体类型:

template<
    class T,
    class Allocator = std::allocator<T>
> class vector;

如果我们没有指定其他参数,则第二个模板参数将获得一个默认值。现在,dyn_vector 也是一个模板,但只有一个参数,即它就像 std::vector 但绝对保证只使用默认分配器。这就是为什么我用“某种”来限定上面的第一句话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-22
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 2020-05-12
    • 2018-06-06
    相关资源
    最近更新 更多