C ++中的typedef - 需要帮助理解

时间:2017-08-02 00:28:16

标签: c++ typedef

我理解typedef的一般概念。但我偶然发现了这一点并且不知道这意味着什么:

typedef PackedIntItem <uint16_t, uint16_t, 0x0FFF, 0xF000, SomeClassName, uint16_t, 0xFFFF> SomeTypeName;

1 个答案:

答案 0 :(得分:1)

typedef <old name> <new name>;

表示我想为数据类型指定一个新名称。通常是因为

  • 旧名很长
  • 我们想要抽象名称,以便我们可以轻松地从一种类型更改为另一种类型

在你的情况下你有用例#1

typedef PackedIntItem<uint16_t, uint16_t, 0x0FFF, 0xF000, SomeClassName, uint16_t, 0xFFFF> SomeTypeName;

旧名很长。现在你的问题归结为 - 这长长的名字究竟是什么?

它是模板化数据类型。这意味着形成了像这样的东西

template<type T1, type T2> class Elephant
{
     T1 widget;
     T2 oleAtIt;
}

但在你的情况下有更多的Ts。现在当你做

Elephant<int, char> dumbo;

您实际上获得了一个类的实例,就像您声明了

一样
class Elephant
{
   int widget;
   char oleAtIt;
}

当您看到std::vector<int> listInt;

时,这就是您正在使用的内容

在你的情况下,有人制作了一个模板,其中包含非常多的参数。看看你是否能找到它的声明

模板是一个巨大的话题。谷歌很多。玩得开心