如何获取“any”当前持有的类型的名称?

How do I get the name of the type currently held by an `any`?

假设我有:

  1. 一个boost::any
  2. 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> >