我一直在问自己一个非常简单的 C++ 问题,但似乎找不到明确的答案。是否可以在不给它命名的情况下引用 C++ 数组的类型?显然,我在这里谈论的是大小数组,而不是指针!
例如想象以下,其中ARRAY_T_N
是 n
的普通数组类型T
的元素:
template<class T, int n, bool useStd>
struct array :
std::conditional<useStd, std::array<T,n>, ARRAY_T_N>
{};
我可以使用一个简单的模板来定义 ARRAY_T_N
:
template<class T, int n> struct array_t {
typedef T type[n];
};
// ARRAY_T_N is array_y<T,n>::type
但我想知道是否有一种语法可以在 C++ 中原生表达这种类型?
另一种看待这个问题的方法是,通常类型可以绑定(bind)到一个名称:
BoundType variable; // variable declaration or function parameter
typedef BoundType type_alias; // type aliasing
或者,它们可以匿名使用:
some_template<AnonType> // template instantiation
using type_alias = AnonType; // C++11 type aliasing
在大多数情况下,对于给定的类型,两种形式都是 BoundType
和 AnonType
完全相同,如 int* ptr
和 std::vector<int*>
.
但有时事情会有所不同,比如函数指针:int (*fptr)(int)
和 std::vector<int(*)(int)>
-- 这里是 BoundType
和 AnonType
对同一类型有不同的语法(你不能写,比如说 int(*)(int) fptr
)
对于普通数组,C++ 是否定义了一个 AnonType
语法?
最佳答案
你当然可以直接使用数组类型而不用typedef或类型别名,例如:
std::unique_ptr< int[6] > smart;
关于c++ - 可以在没有名称的情况下引用 C++ 数组类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20078026/