как сделать #define макрос, чтобы сделать #define "myInt x" "int * x = new int [5]" - PullRequest
0 голосов
/ 31 января 2012

Я могу сделать следующее:

#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 ]

3 голосов
/ 31 января 2012

Вы не можете сделать это с помощью макроса. Вы могли бы сделать это:

typedef int myInt[5];

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

Но это означает, что dog - это массив, а не указатель.

Я не уверен, является ли хорошая идея скрыть тип массива за typedef.

3 голосов
/ 31 января 2012

В зависимости от того, что вы хотите сделать, вы также можете создать класс и перегрузить индекс ([]) оператор , например:

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;
0 голосов
/ 31 января 2012

Вы не можете. Макросы всегда используют скобки для своих параметров. Что вы определяете с помощью:

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

- это замена с myInt на x int* x = new int[5], и это вряд ли то, что вы хотите.

Палка с первым вариантом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...