Nameof fork with modules for modern C++, simply obtain the name of a variable, type, function, macro, and enum
Find a file
2019-03-27 18:53:35 +05:00
example If does not have name return empty string 2019-03-27 18:53:35 +05:00
include If does not have name return empty string 2019-03-27 18:53:35 +05:00
test If does not have name return empty string 2019-03-27 18:53:35 +05:00
.appveyor.yml wip v0.6.0 2019-03-20 21:41:51 +05:00
.gitignore v0.2.3 2018-04-19 01:31:32 +05:00
.travis.yml update ci 2019-03-26 14:56:43 +05:00
CMakeLists.txt v0.7.4 2019-03-27 00:30:27 +05:00
LICENSE wip v0.6.0 2019-03-20 21:41:51 +05:00
README.md update readme 2019-03-26 18:11:24 +05:00

Nameof C++

 _   _                             __    _____
| \ | |                           / _|  / ____|_     _
|  \| | __ _ _ __ ___   ___  ___ | |_  | |   _| |_ _| |_
| . ` |/ _` | '_ ` _ \ / _ \/ _ \|  _| | |  |_   _|_   _|
| |\  | (_| | | | | | |  __/ (_) | |   | |____|_|   |_|
|_| \_|\__,_|_| |_| |_|\___|\___/|_|    \_____|
Branch Linux/OSX Windows License Codacy
master Build Status Build status License Codacy Badge

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"
// Name of enum variable
nameof::nameof_enum(color) -> "RED"

constexpr auto cx_color = Color::BLUE;
// Name of static storage enum variable
nameof::nameof_enum<cx_color>() -> "BLUE"
  • Name of type
using T = int;
T var = 42;
// Name of variable type
NAMEOF_TYPE(var) -> "int"
nameof::nameof_type<decltype(var)>() -> "int"
// Name of type
NAMEOF_TYPE_T(T) -> "int"
nameof::nameof_type<T>() -> "int"
  • Name of macro
// Name of macro
NAMEOF(__LINE__) -> "__LINE__"

Remarks

  • Nameof return std::string_view.

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

  • NAMEOF_ENUM supported on the GCC >= 9.

  • If you need of raw fully-qualified name, use NAMEOF_RAW.

NAMEOF_RAW(somevar.somefield) -> "somevar.somefield"
NAMEOF_RAW(&SomeStruct::SomeMethod) -> "&SomeStruct::SomeMethod"
NAMEOF_RAW(std::string) -> "std::string"
  • Spaces and Tabs ignored
NAMEOF(   somevar   ) -> "somevar"
NAMEOF(	somevar	) -> "somevar"

Integration

You have to add required file nameof.hpp.

Compiler compatibility

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

Licensed under the MIT License