|
Boost : |
From: Peter Dimov (pdimov_at_[hidden])
Date: 2020-09-24 22:13:28
VinÃcius dos Santos Oliveira wrore:
> Hi Peter,
>
> could you consider using "compile-time strings" such as Hana's? I don't
> have much use for a const char* in TMP algorithms.
The descriptor strings are "compile-time". This, for instance, works.
#include <boost/describe.hpp>
#include <boost/mp11.hpp>
#include <cstddef>
#include <array>
using namespace boost::describe;
using namespace boost::mp11;
enum E
{
v1
};
BOOST_DESCRIBE_ENUM(E, v1)
constexpr std::size_t strlen_( char const * s )
{
std::size_t n = 0;
while( *s++ ) ++n;
return n;
}
constexpr std::size_t hash_value( char const * s )
{
std::size_t n = 5381;
while( *s ) n = n * 31 + static_cast<unsigned char>( *s++ );
return n;
}
template<class D> constexpr auto name_as_array()
{
constexpr auto n = strlen_(D::name);
std::array<char, n> r{};
for( std::size_t i = 0; i < n; ++i )
{
r[i] = D::name[i];
}
return r;
}
using D = mp_first< describe_enumerators<E> >;
constexpr auto x1 = strlen_( D::name );
constexpr auto x2 = hash_value( D::name );
constexpr auto x3 = name_as_array<D>();
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk