Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cassert>
- #include <string>
- namespace GetTypeName_Impl {
- template <typename T>
- class GetTypeName {
- public:
- static std::string get() {
- static std::string pattern =
- "static const char* GetTypeName_Impl::GetTypeName<T>::raw() [with T = ";
- std::string res = raw();
- assert(res.size() > pattern.size() && res.substr(0, pattern.size()) == pattern);
- return res.substr(pattern.size(), res.size() - pattern.size() - 1);
- }
- private:
- static const char *raw() {
- return __PRETTY_FUNCTION__;
- }
- };
- }
- template <typename T>
- std::string getTypeName(const T &) {
- return GetTypeName_Impl::GetTypeName<T>::get();
- }
- int main() {
- std::cout << getTypeName(42) << " " << getTypeName("hello") << std::endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement