Advertisement
Guest User

GetTypeName

a guest
Nov 19th, 2022
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.76 KB | None | 0 0
  1. #include <iostream>
  2. #include <cassert>
  3. #include <string>
  4.  
  5. namespace GetTypeName_Impl {
  6. template <typename T>
  7. class GetTypeName {
  8. public:
  9.   static std::string get() {
  10.     static std::string pattern =
  11.       "static const char* GetTypeName_Impl::GetTypeName<T>::raw() [with T = ";
  12.     std::string res = raw();
  13.     assert(res.size() > pattern.size() && res.substr(0, pattern.size()) == pattern);
  14.     return res.substr(pattern.size(), res.size() - pattern.size() - 1);
  15.   }
  16.  
  17. private:
  18.   static const char *raw() {
  19.     return __PRETTY_FUNCTION__;
  20.   }
  21. };
  22. }
  23.  
  24. template <typename T>
  25. std::string getTypeName(const T &) {
  26.   return GetTypeName_Impl::GetTypeName<T>::get();
  27. }
  28.  
  29. int main() {
  30.   std::cout << getTypeName(42) << " " << getTypeName("hello") << std::endl;
  31. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement