A C++ 11 template for type traits of callables (like functions, objects
with operator()
, lambda functions, ...).
The template, callable_traits
, can be used to determine
useful properties of callable objects, like return type, number of
arguments and types of the individual arguments.
It is especially useful in template functions/... that handle callable
objects, for example as callbacks. callable_traits
allows the code
to treat different types of callables uniformly without wrapping them
in a std::function<>
.
Callables are things that can be called with ()
:
- Functions
- Function pointers
- Objects with
operator()
std::function<...>
- Lambda functions
callable_traits
can be used to treat all these different kinds of
callables uniformly in a template function.
callable_traits
deduces the following properties from the
type T
of a callable:
-
The return type
typename callable_traits<T>::return_type
-
The number of arguments
callable_traits<T>::argc
-
The individual argument types
typename callable_traits<T>::template argument_type<N>
-
A function type representing the call:
typename callable_traits<T>::function_type
template<typename Callable>
void metainfo(Callable f) {
std::cout << callable_traits<Callable>::argc << " arguments" << std:endl;
}
The library is header only, so it doesn't need to be compiled. Just include the header file when you need it.
To compile the test cases, you need:
- SCons as a build tool
- Boost.Test for the test cases
With these tools you can compile callable_test
by running scons in the
main directory:
scons
MIT. See LICENSE.txt
for more details.