C ++ указатель на класс, а не объект - PullRequest
0 голосов
/ 18 февраля 2012

Я хочу, чтобы мой генератор карт заполнил некоторую часть карты данной плиткой, но я не знаю, как передать это значение, мне нужно создать НОВЫЙ объект с заданным ТИПОМ (который является одним из параметров) ... Например:

void flood(/*???*/ pattern, double radius_val, tile *map[20][20], int x, int y)
{
     if (radius_val<0) return;
     map[x][y]=new pattern();
     flood(pattern,radius_val-1, map, x+1, y);
     //... more code
};

Я не знаю, как показать flooder, какой тип объекта он собирается создать ... Шаблон должен указывать на одного из дочерних элементов класса плиток (например, tile_tree).

Спасибо за любую помощь.

1 Ответ

3 голосов
/ 18 февраля 2012

Аргументы функции не могут быть типами, поскольку аргументы функции содержат значения, а типы не являются значениями.Аргументы шаблона, однако, могут быть типами.

template <typename pattern>
void flood(double radius_val, tile *map[20][20], int x, int y)
{
     if (radius_val<0) return;
     map[x][y]=new pattern();
     flood<pattern>(radius_val-1, map, x+1, y);
     //... more code
};

По сути, это создает новую функцию для каждого pattern, который вы хотите использовать, но без необходимости набирать все определения функций.

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