...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
Determine if T
has the get_executor
member function.
Defined in header <boost/beast/core/stream_traits.hpp>
template< class T> using has_get_executor = see-below;
Metafunctions are used to perform compile time checking of template types.
This type will be std::true_type
if T
has the member function with the correct signature, else type will be std::false_type
.
Use with tag dispatching:
template < class T> void maybe_hello(T const & t, std::true_type) { net::post( t.get_executor(), [] { std::cout << "Hello, world!" << std::endl; }); } template < class T> void maybe_hello(T const &, std::false_type) { // T does not have get_executor } template < class T> void maybe_hello(T const & t) { maybe_hello(t, has_get_executor<T>{}); }
Use with static_assert
:
struct stream { using executor_type = net::io_context::executor_type; executor_type get_executor() noexcept; }; static_assert(has_get_executor<stream>::value, "Missing get_executor member");