Параметры шаблона в C ++ - PullRequest
3 голосов
/ 12 октября 2010

Предположим, у меня есть произвольный метод шаблона, который может получать параметры по значению и по константной ссылке (очевидно, для тривиальных типов и для объектов соответственно).

Как обрабатывается эта ситуация при написании прототипов функций шаблона?

Я мог бы сделать что-то вроде:

template <typename T> void Foo(T value) {
   // Do something.
}

template <typename T> void Foo(const T& value) {
   // Do something, yeah.
}

// Specialization for first prototype. 
template <> void Foo<int>(int value) { }

// Specialization for second prototype. 
template <> void Foo<Object>(const Object& value) { }

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

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

Могу ли я сделать здесь что-нибудь умнее?

Ответы [ 2 ]

7 голосов
/ 12 октября 2010

ВСЕГДА принимайте по константной ссылке, потому что при передаче примитивных типов в виде константных ссылок не так много.

5 голосов
/ 12 октября 2010

Напишите код вашего шаблона только для const ссылок и положитесь на компилятор для оптимизации ссылок.

...