I'd like to write a template function
template <typename T>
void f( T v );
such that v
will be passed by value if it's small enough, otherwise by reference-to-const. For this, I used a little helper
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;
};
in the past such that I can have
template <typename T>
void f( typename parameter<T>::type v );
Now, in C++11: does this kind of helper template still make sense, or is there a better way to achieve the same effect? Is there maybe a ready-made template already? I checked <type_traits>
but couldn't spot anything which seemed relevant.
With C++11 you can define an alias template and save yourself some typing.
template<typename T>
using parameter_t = typename parameter<T>::type;
and then use it as
template <typename T>
void f( parameter_t<T> v );
AFAIK, there's nothing built into the standard library for this. Also, you will lose template argument deduction implementing such a trait, which, in my opinion, reduces its utility greatly.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With