std::any测试
#include <any> class A { public: int8_t a; }; int main(int argc, char* argv[]) { std::any num((int8_t)42); auto a = std::any_cast<A>(num); return 0; }异常: 0x00007FFA9385CD29 处(位于 test.exe 中)有未经处理的异常: Microsoft C++ 异常:std::bad_any_cast,位于内存位置 0x000000882B96FC50 处。
SafeAny测试
#include "SafeAny/safe_any.hpp" class A { public: int8_t a; }; int main(int argc, char* argv[]) { Any num( (int8_t) 42 ); auto a = num.cast<A>(); }异常:D:\SafeCppAny\test.cpp:12: Failure: due to unexpected exception with message: [Any::convert]: no known safe conversion between__int64andclass A
优点
SafeAny比std::any增加了错误位置,错误类型转换说明,方便问题定位
参考
GitHub - facontidavide/SafeCppAny: Extension of std::any with small object optmization and safe numeric conversion.