如何获取“any”当前持有的类型的名称?
How do I get the name of the type currently held by an `any`?
假设我有:
- 一个
boost::any
或
std::any
(我使用的是 C++17)
我不知道的类型。我可以打印或作为字符串获取 any
所持有的类型的名称吗?
注意: 即使是一个损坏的类型名称——你用 typeid(TR).name()
得到的那种——也足够了,我可以使用 abi::__cxa_demangle
从那里得到它。
#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 模板库 class 的 type_info 看起来比 std::string
更难看(看起来像:class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
)
假设我有:
- 一个
boost::any
或 std::any
(我使用的是 C++17)
我不知道的类型。我可以打印或作为字符串获取 any
所持有的类型的名称吗?
注意: 即使是一个损坏的类型名称——你用 typeid(TR).name()
得到的那种——也足够了,我可以使用 abi::__cxa_demangle
从那里得到它。
#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 模板库 class 的 type_info 看起来比 std::string
更难看(看起来像:class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
)