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

时间:2017-08-22 23:00:57

标签: c++ reflection c++17 type-erasure boost-any

假设我有:

  1. A boost::any
  2. std::any(我正在使用C ++ 17)
  3. 我不知道的类型。我是否可以打印或以字符串形式获取any所持有的类型的名称?

    注意:即使是错误的类型名称 - 您使用typeid(TR).name()获得的类型 - 也足以让我使用abi::__cxa_demangle从中获取。

1 个答案:

答案 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> >