template struct mrpt::typemeta::TTypeName

Overview

A template to obtain the type of its argument as a string at compile time.

It works with all classes derived from CObject, plus many specializations for the plain data types (bool, double, uint8_t, etc…) For example:

cout << TTypeName<double>::get() << endl;  // "double"
cout << TTypeName<CPose2D>::get() << endl; // "CPose2D"

Users can extend this for custom structs/classes with the macro DECLARE_CUSTOM_TTYPENAME:

class MyClass { ... };
DECLARE_CUSTOM_TTYPENAME(MyClass)
cout << TTypeName<MyClass>::get() << endl;  // "MyClass"

or alternatively, to avoid adding out-of-class macros:

namespace MyNS {
 class MyClass {
   DECLARE_TTYPENAME_CLASSNAME(MyNS::MyClass)
 };
}
cout << TTypeName<MyNS::MyClass>::get() << endl; // "MyNS::MyClass"

The following types are NOT ALLOWED since they have platform-dependant sizes:

  • int, unsigned int

  • long, unsigned long

  • short, unsigned short

  • size_t

#include <mrpt/typemeta/TTypeName.h>

template <typename T>
struct TTypeName
{
    // methods

    static constexpr static auto get();
};