nameof
v0.10.4
仅标题C ++ 17库提供了宏和函数的名称,以简单地获取变量,类型,功能,宏和枚举的名称。
如果您喜欢这个项目,请考虑捐赠给有助于乌克兰战争受害者的资金之一:https://u24.gov.ua。
名称
// 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>()"枚举
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"类型的名称
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"您应该添加所需的文件namef.hpp。
如果您在项目上使用VCPKG来用于外部依赖项,则可以使用nameof软件包。
如果您使用柯南来管理依赖项,则仅在柯南的要求中添加nameof/xyz , xyz是您要使用的发行版本。
Archlinux用户可以使用以下命令安装包装管理器AUR的nameof : yay -S nameof 。
另外,您可以使用基于CMAKE的Fetch_Content模块之类的CPM。
CPMAddPackage(
NAME nameof
GITHUB_REPOSITORY Neargye/nameof
GIT_TAG x.y.z # Where `x.y.z` is the release version you want to use.
)检查每个功能的参考。