Замена шаблонной функции foo (T *) на foo (T) - PullRequest
0 голосов
/ 14 октября 2011

В моем коде у меня есть функция:

template<typename T>
void foo (T*); // make sure that 'foo()' is passed only pointers

Теперь в новой реализации я передаю также умный указатель (что-то вроде shared_ptr<>. Поэтому я изменил сигнатуру функции на

template<typename T>
void foo (T);  // pointers or smart-pointers

Код должен работать нормально. Однако есть ли какой-то побочный эффект, которого мне не хватает?

Ответы [ 2 ]

1 голос
/ 14 октября 2011

Вы можете использовать enable_if, чтобы разрешить компиляцию только указателей или экземпляров shared_ptr, если хотите. Таким образом, вы можете вернуться к проверке времени компиляции, которую вы выполняли раньше (хотя, по-видимому, ваша реализация функций также сделает это).

0 голосов
/ 14 октября 2011

void foo (T) передается по копии. T & (передача по ссылке) будет более эффективным, если sizeof (T) немалый.

...