假设我有:
boost::any
或std::any
(我正在使用C ++ 17)我不知道的类型。我是否可以打印或以字符串形式获取any
所持有的类型的名称?
注意:即使是错误的类型名称 - 您使用typeid(TR).name()
获得的类型 - 也足以让我使用abi::__cxa_demangle
从中获取。
答案 0 :(得分:4)
#include <any>
#include <iostream>
using namespace std;
namespace TestNamespace {
class Test {
int x{ 0 };
int y{ 1 };
};
}
int main()
{
any thing = TestNamespace::Test();
cout << thing.type().name() << endl;
cin.get();
return 0;
}
输出:
class TestNamespace::Test
哦,至少在msvc中,std模板库类的type_info看起来比说std::string
看起来更加丑陋(看起来像:class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
)