2019-05-28:Apple对C++
2019-05-28  本文已影响0人  memset
  • 事情是这样的:我在项目中用到<any>和any_cast,在Windows和Android上编译都是没有问的,但到了iOS这边报错:
    error: call to unavailable function 'any_cast': introduced in iOS 12.0
  • 在网上搜到了https://stackoverflow.com/questions/44217316/how-do-i-use-stdoptional-in-c。其实是同样的问题:
    optional.cpp:17:21: error: call to unavailable member function 'value':
  • 这些函数可能会抛出一个bad_xxx_access的异常。然后这个异常的what方法,不是实现在头文件里面的,而是实现在cpp里面的(iOS使用llvm):https://github.com/llvm-mirror/libcxx/blob/master/src/any.cpp
    。相比之下,gcc的的实现是在头文件里面的:https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/any
  • 也就是说,iOS的bad_xxx_access异常是实现在libc++.dylib里面的。每个版本的iOS系统的libc++.dylib都是不一样的。在iOS 12.0及以上,才有实现bad_xxx_access::what函数。如果DEPLOYMENT_TARGET小于12.0的话,就会编译不通过。
  • 解决方案:使用不会抛异常的版本


    image.png

上一篇下一篇

猜你喜欢

热点阅读