здесь разные экземпляры генерируются для этой функции шаблона или нет? - PullRequest
1 голос
/ 09 ноября 2010

Учитывая следующие функции структуры и шаблона, каждый раз при использовании функции с различным значением для "num" создается новый экземпляр функции или поскольку параметр const numbers<num> & nums является ссылкой и будет реализован как указатель, который все использует сразличные значения для "num" могут быть направлены на один экземпляр функции?

template<size_t num>    
struct numbers{
 public:
  unsigned int nums[num];
};

template<size_t num>
void print(const numbers<num> & nums,size_t size){
 for (int i=0;i<size;i++)
  cout <<nums.nums[i]<<' ';
 cout <<'\n';
}

Ответы [ 3 ]

4 голосов
/ 09 ноября 2010

Что касается вас (программиста), print<2>() и print<3>() - это отдельные функции. Хотя компилятор теоретически может выполнить эту оптимизацию, это, вероятно, не произойдет на практике. Лучший способ узнать наверняка - взглянуть на сгенерированный ассемблер.

3 голосов
/ 09 ноября 2010

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

1 голос
/ 09 ноября 2010

Да, каждый экземпляр шаблона с новым набором значений параметров приводит к новой функции.

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