【发布时间】:2020-09-05 02:28:28
【问题描述】:
是否可以在使用前声明 using 声明?
我想做这样的事情:
using V = std::vector< V >;
或喜欢:
using X, Y; // declaring X and Y
using Node = std::variant< X, Y >;
using X = std::unordered_vector< Node >;
using Y = std::vector< Node >;
有可能吗?
编辑:cmets 关注V 我定义的比我的意思更多。
我不需要那种类型,但这是我能想到的最简单的例子来说明问题。第二个例子,X、Y 和 Node 更接近我的需要。另一个类似的例子可能是:using MyList = std::pair<Data, MyList*>。
我作为示例提出的这些类型是有意义的并且应该能够存在的类型。我可以通过定义我自己的结构来定义V、Node、MyList 等,例如:struct V{ V* start; V* end; /*all the other methods here*/ };... 但是因为在std 中已经定义了很多类型并且具有大量定义明确的语义(构造函数、运算符、迭代器的东西、专门为它们设计的特征类型等),我不想重新定义相同的类型。
是否可以使用 using-declarations 创建“递归”(尤其是间接递归,如 Node 或 MyList 示例)类型?
【问题讨论】:
-
我觉得这可能是一个 XY 问题。为什么要这样做?
-
std::vector< V >其中V本身就是std::vector< V >没有意义——它一直是海龟。你打算用多少对方括号来访问这个野兽的一个元素,那个元素的类型是什么? -
所以你想让
V由一个元素序列组成,每个元素包含一个元素序列,每个元素都包含一个元素序列,每个元素都包含一个元素序列,每个其中保存了一个元素序列,每个元素保存一个元素序列,每个元素保存一个元素序列,每个元素保存一个元素序列,每个元素保存一个元素序列,每个元素保存一个序列元素,每个元素保存一个元素序列,每个元素保存一个元素序列,每个元素保存一个元素序列,每个元素......? -
您已经可以在 C++ 中执行此操作。它被称为泛型类型。在 C++ 20 中,我们还可以访问进一步巩固类型及其用法的约束和概念
-
为什么每个人都如此关注“递归”向量?我认为选择我能想到的最小的例子会让我的问题更清楚。我并不是要开始对这种类型的含义进行哲学讨论。
标签: c++ declaration using