Я хотел бы написать функцию шаблона
template <typename T>
void f( T v );
так что v
будет передаваться по значению, если оно достаточно мало, иначе ссылка-на-const. Для этого я использовал небольшой помощник
template <typename T, bool>
struct parameter_helper;
template <typename T>
struct parameter_helper<T, true> {
typedef T type;
};
template <typename T>
struct parameter_helper<T, false> {
typedef const T& type;
};
template <typename T>
struct parameter {
typedef typename parameter_helper<T, sizeof(T) <= sizeof(void*)>::type type;
};
в прошлом, так что я мог бы иметь
template <typename T>
void f( typename parameter<T>::type v );
Теперь, в С++ 11: этот тип вспомогательного шаблона все еще имеет смысл или есть лучший способ добиться такого же эффекта? Возможно ли уже готовый шаблон? Я проверил <type_traits>
, но не смог обнаружить ничего, что казалось актуальным.