Nameof fork with modules for modern C++, simply obtain the name of a variable, type, function, macro, and enum
Find a file
2019-04-02 20:42:47 +05:00
example improve nameof 2019-04-02 20:42:47 +05:00
include improve nameof 2019-04-02 20:42:47 +05:00
test improve nameof 2019-04-02 20:42:47 +05:00
.appveyor.yml wip v0.6.0 2019-03-20 21:41:51 +05:00
.gitignore update gitignore 2019-03-30 12:03:44 +05:00
.travis.yml update ci 2019-04-02 18:47:37 +05:00
CMakeLists.txt v0.7.5 2019-03-28 00:33:00 +05:00
LICENSE wip v0.6.0 2019-03-20 21:41:51 +05:00
README.md improve nameof 2019-04-02 20:42:47 +05:00

Nameof C++

 _   _                             __    _____
| \ | |                           / _|  / ____|_     _
|  \| | __ _ _ __ ___   ___  ___ | |_  | |   _| |_ _| |_
| . ` |/ _` | '_ ` _ \ / _ \/ _ \|  _| | |  |_   _|_   _|
| |\  | (_| | | | | | |  __/ (_) | |   | |____|_|   |_|
|_| \_|\__,_|_| |_| |_|\___|\___/|_|    \_____|

License Build Status Build status Codacy Badge Try online

What is Nameof?

Header-only C++17 library provides nameof macros and functions to obtain simple name of variable, type, function, macro, and enum.

Features

  • C++17
  • Header-only
  • Dependency-free
  • Compile-time
  • Name of variable, member variable
  • Name of type, variable type
  • Name of function, member function
  • Name of enum, enum variable
  • Name of macro
  • Enum to string

Examples

  • Name of variable

    // Name of variable.
    NAMEOF(somevar) -> "somevar"
    
    // Name of member variable.
    NAMEOF(person.address.zip_code) -> "zip_code"
    
  • Name of function

    // Name of function.
    NAMEOF(foo<int, float>()) -> "foo"
    NAMEOF_FULL(foo<int, float>()) -> "foo<int, float>"
    
    // Name of member function.
    NAMEOF(somevar.some_method()) -> "some_method"
    NAMEOF_FULL(somevar.some_method<int>()) -> "some_method<int>"
    
  • Name of enum

    auto color = Color::RED;
    // Name of enum variable.
    NAMEOF_ENUM(color) -> "RED"
    nameof::nameof_enum(color) -> "RED"
    
    constexpr auto const_color = Color::BLUE;
    // Name of static storage enum variable.
    NAMEOF_CONST_ENUM(const_color) -> "BLUE"
    nameof::nameof_enum<const_color>() -> "BLUE"
    
  • Name of type

    using T = int;
    T var = 42;
    // Name of variable type.
    NAMEOF_VAR_TYPE(var) -> "int"
    nameof::nameof_type<decltype(var)>() -> "int"
    
    // Name of type.
    NAMEOF_TYPE(T) -> "int"
    nameof::nameof_type<T>() -> "int"
    
  • Name of macro

    // Name of macro.
    NAMEOF(__LINE__) -> "__LINE__"
    NAMEOF(NAMEOF(structvar)) -> "NAMEOF"
    

Remarks

  • Nameof return std::string_view. If arguments does not have name, Nameof return empty string.

  • Nameof expression arguments are identified, but do not evaluated.

  • Enum variable must be in range (-NAMEOF_ENUM_RANGE, NAMEOF_ENUM_RANGE). By default NAMEOF_ENUM_RANGE = 128. If you need a larger range, redefine the macro NAMEOF_ENUM_RANGE.

    #define NAMEOF_ENUM_RANGE 1028 // Redefine NAMEOF_ENUM_RANGE for larger range.
    #include <nameof.hpp>
    
  • If you need of raw fully-qualified name, use NAMEOF_RAW.

    NAMEOF_RAW(somevar.somefield) -> "somevar.somefield"
    NAMEOF_RAW(&some_class::some_method<int>) -> "&some_class::some_method<int>"
    
  • Spaces and Tabs ignored

    NAMEOF(   somevar   ) -> "somevar"
    NAMEOF(	somevar	) -> "somevar"
    

Integration

You should add required file nameof.hpp.

Compiler compatibility

  • Clang/LLVM >= 5
  • Visual C++ >= 15.3 / Visual Studio >= 2017
  • Xcode >= 9
  • GCC >= 7 (GCC >= 9 for NAMEOF_ENUM)

Licensed under the MIT License