|
Boost : |
Subject: [boost] Adding helpful requires macros to the enable_if utility
From: paul Fultz (pfultz2_at_[hidden])
Date: 2014-06-27 12:10:33
These following set of macros, I have found very useful in C++:
#define BOOST_ERROR_PARENTHESIS_MUST_BE_PLACED_AROUND_THE_RETURN_TYPE(...) __VA_ARGS__>::type
#define BOOST_FUNCTION_REQUIRES(...) typename boost::enable_if_c<(__VA_ARGS__), BOOST_ERROR_PARENTHESIS_MUST_BE_PLACED_AROUND_THE_RETURN_TYPE
#define BOOST_CLASS_REQUIRES(...) typename boost::enable_if_c<(__VA_ARGS__)>::type
#define BOOST_REQUIRES(...) typename boost::enable_if_c<(__VA_ARGS__), int>::type = 0
Which I use like the following
For functions:
template <class T>
BOOST_FUNCTION_REQUIRES(boost::is_arithmetic<T>::value)
(T) foo(T t) { return t; }
And C++11 functions:
template <class T, BOOST_REQUIRES(boost::is_arithmetic<T>())>
T foo(T t) { return t; }
Class specializations:
template <class T, class Enable = void>
class A { ... };
template <class T>
class A<T, BOOST_CLASS_REQUIRES(is_integral<T>())> { ... };
template <class T>
class A<T, BOOST_CLASS_REQUIRES(is_float<T>())> { ... };
It would be nice if these were the added with the enable_if utility with boost.
Thanks,
Paul
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk