C ++中更简单的数组声明语法

时间:2010-03-31 10:07:41

标签: c++ arrays syntax

本着Go语言的精神,简单的语法被认为是非常重要的,这里有一个C ++中更简单的数组声明的提议:

int   value;
int_1 list;
int_2 table;
int_3 cube;
RECT  rect;
RECT_1 rects;

使用typedef,可以扩展为:

int   value;
vector<int> list;
vector<vector<int> > table;
vector<vector<vector<int> > > cube;
RECT  rect;
vector<RECT> rects;

你会使用它吗,还是有这么简单的语法?

修改 扩展语法中存在错误。将vector< int>修复为vector< vector< int> > ..

5 个答案:

答案 0 :(得分:2)

名称带有语义,没有别的。 int_1在意义方面没有传达太多,而vector< int >在这里很清楚。

答案 1 :(得分:1)

我知道更简单的语法是受欢迎的,特别是在C ++中,控制字符(点,括号,括号,半列)经常在代码中引入图形噪声。

但为什么要使用数字来识别数组呢?这是数组大小吗?在这种情况下,vector<int>可能不合适......

我会选择像intArray这样简单的东西。但同样,当程序员看到这个时,你必须平衡好处和WTF效应。

编辑:哇,基于您的编辑,看起来数字代表维度。它可能比简单地使用typedef更棘手,因为多维数组具有困难的语义。您可以根据需要按维度初始化数组维度。

什么时候实际上是最困难的部分,在开始时初始化所有内容可能更简单,但是大数据可能会迫使您在开始时初始化维度。

答案 2 :(得分:0)

我不会。

这怎么这么简单?

此外,C ++中数组的语法是:

int   value;
int list[1];
int table[2];
int cube[3];
RECT  rect;
RECT rects[1];

不确定这是你的模糊的意图,因为我没有在1个单元格数组中看到感觉。

答案 3 :(得分:0)

我个人不会用它。也许如果你做的宏会扩展到元组:

_(int, int) int_pair; // tr1::tuple<int, int>
_(int, int, int) coord_3d; // tr1::tuple<int, int, int>

如果你不喜欢_作为宏,那么你可能想看看使用不常用的东西。

答案 4 :(得分:0)

选择数组的向量似乎有些奇怪。为什么不std::(tr1::)array

但是这样的事情怎么样:

#include <vector>

template <class T, size_t N>
struct Nested
{
    typedef std::vector< typename Nested<T, N - 1>::type > type;
};

template <class T>
struct Nested<T, 0u>
{
    typedef T type;
};


int main()
{
    Nested<int, 2>::type table;
    table.push_back(Nested<int, 1>::type());
    table.front().push_back(10);
}

缺少模板typedef,直到C ++ 0x,你可以添加:

template <class T, size_t N>
using NestedVector = typename Nested<T, N>::type

//usage:
NestedVector<int, 3> vec; //vector<vector<vector<int>>>