La biblioteca C ++ 17 solo de encabezado proporciona un nombre de macros y funciones para simplemente obtener el nombre de una variable, tipo, función, macro y enum.
Si le gusta este proyecto, considere donar a uno de los fondos que ayudan a las víctimas de la guerra en Ucrania: https://u24.gov.ua.
Nombre
// Name of variable.
NAMEOF (somevar) -> "somevar"
// Name of member variable.
NAMEOF(person.address.zip_code) -> "zip_code"
// Name of function.
NAMEOF(foo< int , float >()) -> "foo"
// Name of member function.
NAMEOF(somevar.some_method()) -> "some_method"
NAMEOF(somevar.some_method< int >()) -> "some_method"
// Name of macro.
NAMEOF(__LINE__) -> "__LINE__"
NAMEOF(NAMEOF(structvar)) -> "NAMEOF"
// Obtains full name of variable, function, macro.
NAMEOF_FULL(somevar.some_method< int >()) -> "some_method<int>"
// Obtains raw name of variable, function, macro.
NAMEOF_RAW(somevar.some_method< int >()) -> "somevar.some_method<int>()"Nombre de enum
enum class Color { RED = 1 , BLUE = 2 , GREEN = 4 };
auto color = Color::RED;
// Name of enum variable.
NAMEOF_ENUM (color) -> "RED"
nameof::nameof_enum(color) -> "RED"
// Static storage enum variable to string.
// This version is much lighter on the compile times and is not restricted to the enum_range limitation.
NAMEOF_ENUM_CONST(Color::GREEN) -> "GREEN"
nameof::nameof_enum<Color::GREEN>() -> "GREEN"
// Enum flags variable to string.
NAMEOF_ENUM_FLAG(Color::GREEN | Color::BLUE) -> "GREEN|BLUE"
nameof::nameof_enum_flag<Color::GREEN | Color::BLUE>() -> "GREEN|BLUE"
// Obtains name of enum variable or default value if enum variable out of range.
NAMEOF_ENUM_OR(Color::GREEN) -> "GREEN"
NAMEOF_ENUM_OR((Color)0, "none") -> "none"Nombre de tipo
const my::detail::SomeClass< int >& var_ref = var;
// Name of variable type.
NAMEOF_TYPE_EXPR (var_ref) -> "my::detail::SomeClass<int>"
nameof::nameof_type<decltype(var_ref)>() -> "my::detail::SomeClass<int>"
NAMEOF_FULL_TYPE_EXPR(var_ref) -> " const my::detail::SomeClass<int>&"
nameof::nameof_full_type<decltype(var_ref)>() -> " const my::detail::SomeClass<int>&"
NAMEOF_SHORT_TYPE_EXPR(var_ref) -> "SomeClass"
nameof::nameof_short_type<decltype(var_ref)>() -> "SomeClass"
using T = const my::detail::SomeClass<int>&;
// Name of type.
NAMEOF_TYPE (T) ->"my::detail::SomeClass<int>"
nameof::nameof_type<T>() -> "my::detail::SomeClass<int>"
NAMEOF_FULL_TYPE(T) -> " const my::detail::SomeClass<int>&"
nameof::nameof_full_type<T>() -> " const my::detail::SomeClass<int>&"
NAMEOF_SHORT_TYPE(T) -> "SomeClass"
nameof::nameof_short_type<T>() -> "SomeClass"
my::detail::Base* ptr = new my::detail::Derived();
// Name of type, using rtti.
NAMEOF_TYPE_RTTI (*ptr) -> "my::detail::Derived"
NAMEOF_FULL_TYPE_RTTI(*ptr) -> "volatile const my::detail::Derived&"
NAMEOF_SHORT_TYPE_RTTI(*ptr) -> "Derived"
struct A {
int this_is_the_name;
};
// Obtains name of member.
NAMEOF_MEMBER (&A::this_is_the_name) -> "this_is_the_name"
nameof::nameof_member(&A::this_is_the_name) -> "this_is_the_name"
int someglobalvariable = 0;
// Obtains name of a function, a global or class static variable.
NAMEOF_POINTER (&someglobalconstvariable) == "someglobalconstvariable"
nameof::nameof_pointer(&someglobalconstvariable) == "someglobalconstvariable"
constexpr auto global_ptr = &someglobalvariable;
NAMEOF_POINTER (global_ptr) == "someglobalconstvariable"
nameof::nameof_pointer(global_ptr) == "someglobalconstvariable"Debe agregar el nombre de archivo requerido de.hpp.
Si está utilizando VCPKG en su proyecto para dependencias externas, puede usar el paquete NameOf.
Si está utilizando Conan para administrar sus dependencias, simplemente agregue nameof/xyz a sus necesidades de Conan, donde xyz es la versión de lanzamiento que desea usar.
Los usuarios de Archlinux pueden instalar nameof by Package Manager AUR, utilizando el siguiente comando: yay -S nameof .
Alternativamente, puede usar algo como CPM que se basa en el módulo Fetch_Content de CMake.
CPMAddPackage(
NAME nameof
GITHUB_REPOSITORY Neargye/nameof
GIT_TAG x.y.z # Where `x.y.z` is the release version you want to use.
)Verifique la referencia para cada características.