Предположим, у меня есть произвольный метод шаблона, который может получать параметры по значению и по константной ссылке (очевидно, для тривиальных типов и для объектов соответственно).
Как обрабатывается эта ситуация при написании прототипов функций шаблона?
Я мог бы сделать что-то вроде:
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) { }
Но этот подход подходит только для тривиальных функций, которые действуют просто как обертка для некоторых других вызовов.
Если функция (версия без шаблонов) содержит много кода, это означает, что Я должен был бы скопировать код дважды.
Могу ли я сделать здесь что-нибудь умнее?