Заголовок<<boost/core/typeinfo.hpp>
>определяет класс<boost::core::typeinfo
>, который является псевдонимом для<std::type_info
>, когда включен RTTI, и является разумной заменой, когда RTTI не поддерживается.
Макро<BOOST_CORE_TYPEID
>, при применении к типу<T
>, является эквивалентом<typeid(T)
>и производит отсылку к объекту const<typeinfo
>.
Функция<boost::core::demangled_name
>принимает<boost::core::typeinfoconst&ti
>и либо возвращает<ti.name()
>, когда эта строка не должна быть распутана, либо<boost::core::demangle(ti.name())
>, когда она это делает. Возвращение<boost::core::demangled_name
>в первом случае<charconst*
>и<std::string
>во втором.
namespace boost
{
namespace core
{
class typeinfo;
demangled_name( typeinfo const & ti );
}
}
#define BOOST_CORE_TYPEID(T)
#include <boost/core/typeinfo.hpp>
#include <iostream>
template<class T1, class T2> struct X
{
};
int main()
{
typedef X<void const*, void(*)(float)> T;
boost::core::typeinfo const & ti = BOOST_CORE_TYPEID(T);
std::cout << boost::core::demangled_name( ti ) << std::endl;
}