C++ Typedef signature

C++ Typedef signature

本文关键字:signature Typedef C++      更新时间:2023-10-16

可能重复:
我必须将“模板”以及“typename;关键词?

我看了这个boost::multi_array的例子,它有一个typedef,比如:

template <typename Array>
...
typedef typename Array::template subarray<2>::type::iterator iterator2;

我了解

typedef typename <type> <new_type>;

签名看起来像,但在typedef typename之后有三件事,我在网上找不到它的名字或作用。有人能分解一下typedef是做什么的吗?为什么它有三件事?我不认为这是特定于助推的。

Array::template中的template的工作原理与您已经理解的typename完全相同。它在typedef中的作用是告诉(承诺)编译器subarray实际上是一个模板,因此<2>是有意义的

这与typename关键字在typedef中的作用完全相同,但其效果是告诉编译器它是template而不是类型。

这是旧的

typedef typename <type> <new_type>;

你已经明白了。

typetypename Array::template subarray<2>::type::iterator

new_typeiterator2

无论何时编写模板函数/类,编译器有时都需要一些帮助。在本例中,Array::template是模板化类型内部的类型,这使得它需要typename

如果没有这种需要,typedef将只是:

typedef Array::template subarray<2>::type::iterator iterator2;

但是,这将(通常产生)编译器错误。要修复此错误,只需插入typename关键字即可。

typedef typename Array::template subarray<2>::type::iterator iterator2;

typename在这种情况下是一个帮助程序,让编译器知道这是一个类型。当编译器在依赖类型和限定类型之间进行选择时,模板中会使用关键字。