Files
2026-10-23 16:13:31 +00:00

56 lines
1.3 KiB
C++

#pragma once
#include <cstddef>
#include <iostream>
#ifdef __GNUG__
#include <cstdlib>
#include <memory>
#include <cxxabi.h>
#endif
//#define DDKIT_ENABLE_LIFETIME_LOGGER
namespace ddkit {
namespace utils {
namespace log {
template <typename Type>
class LifetimeLogger {
public:
LifetimeLogger() {
#ifdef DDKIT_ENABLE_LIFETIME_LOGGER
std::cerr << "Constructor of:\t" << typeName() << " @ " << this << std::endl;
#endif
}
~LifetimeLogger() {
#ifdef DDKIT_ENABLE_LIFETIME_LOGGER
std::cerr << "Destructor of: \t" << typeName() << " @ " << this << std::endl;
#endif
}
private:
std::string typeName() const {
#ifdef __GNUG__
const char* mangled = typeid(Type).name();
int status = 0;
char* name = abi::__cxa_demangle(mangled, nullptr, nullptr, &status);
if(status == 0) {
std::string demangledName(name);
delete name;
return demangledName;
}
return mangled;
#else
return typeid(Type).name();
#endif
}
};
} // namespace log
} // namespace utils
} // namespace ddkit