Вы можете использовать специальный abi::__cxa_demangle
функцию ССЗ:
#include <memory>
#include <cstdlib>
#include <cxxabi.h>
#include <iostream>
// delete malloc'd memory
struct malloc_deleter
{
void operator()(void* p) const { std::free(p); }
};
// custom smart pointer for c-style strings allocated with std::malloc
using cstring_uptr = std::unique_ptr<char, malloc_deleter>;
int main()
{
// special function to de-mangle names
int error;
cstring_uptr name(abi::__cxa_demangle(typeid([]{}).name(), 0, 0, &error));
if(!error)
std::cout << name.get() << '\n';
else if(error == -1)
std::cerr << "memory allocation failed" << '\n';
else if(error == -2)
std::cerr << "not a valid mangled name" << '\n';
else if(error == -3)
std::cerr << "bad argument" << '\n';
}
Выход:
main::{lambda()#1}
По The Documentation эта функция возвращает кесарево стиль с нулевым окончанием Строка, выделенная с использованием std::malloc, которой вызывающий абонент должен освободить, используя std::free. В этом примере используется умный указатель, чтобы автоматически освободить возвращаемую строку в конце области действия.
Что вы ожидаете от вывода? '[]()'? – nwp
lambda: неназванный функциональный объект, способный захватывать переменные в области видимости. Что бы вы хотели, чтобы имя было? –
@richard И две лямбды, известные как 'bob', конечно. – Yakk