21 PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
22 PYBIND11_NAMESPACE_BEGIN(detail)
24 inline
void erase_all(std::
string &
string, const std::
string &search) {
25 for (
size_t pos = 0;;) {
26 pos =
string.find(search, pos);
27 if (pos == std::string::npos)
break;
28 string.erase(pos, search.length());
32 PYBIND11_NOINLINE
inline void clean_type_id(std::string &
name) {
35 std::unique_ptr<char, void (*)(void *)> res {
36 abi::__cxa_demangle(name.c_str(),
nullptr,
nullptr, &status), std::free };
40 detail::erase_all(name,
"class ");
41 detail::erase_all(name,
"struct ");
42 detail::erase_all(name,
"enum ");
44 detail::erase_all(name,
"pybind11::");
46 PYBIND11_NAMESPACE_END(detail)
49 template <typename T> static std::
string type_id() {
50 std::string name(
typeid(T).name());
51 detail::clean_type_id(name);
55 PYBIND11_NAMESPACE_END(PYBIND11_NAMESPACE)
Annotation for function names.