如何做#define宏来做#define“myInt x”“int * x = new int [5]”

时间:2012-01-31 08:32:53

标签: c++ visual-c++

我可以做以下事情:

#define myInt(x) int* x = new int[5]

...

myInt(dog);

dog[1] = 3;
dog[2] = 5;

但我想要的是:

#define myInt x  int* x = new int[5]

所以我可以做到

myInt dog;

dog[1] = 3;
dog[2] = 5;

设置此项以删除函数设置的正确方法是什么?

我试图理解Visual C ++ 2010如何在声明一个类时使用指针... cMy *my = new cMy(); --> cMy my;

3 个答案:

答案 0 :(得分:3)

使用宏无法执行此操作。你可以这样做:

typedef int myInt[5];

myInt dog;
dog[1] = 3;
dog[2] = 5;

但这意味着dog是一个数组,而不是一个指针。

我不确定是否在typedef后面隐藏数组类型是一个好主意。

答案 1 :(得分:3)

根据您的目的,您还可以创建一个类重载下标([])运算符,例如:

class myInt
{
private:
   int m_List[5];

public:
   int& operator[] (const int nIndex)
   {
     return m_List[nIndex];
   }
};

然后你也可以写:

myInt dog;
dog[1] = 3;
dog[2] = 5;

答案 2 :(得分:0)

你做不到。宏总是使用括号作为参数。你用什么来定义:

#define myInt x  int* x = new int[5]

是从myIntx int* x = new int[5]的替代品,而这几乎不是您想要的。

坚持第一个变种。