- 事情是这样的:我在项目中用到<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
网友评论