C++ std::any升级为SafeAny

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 __int64 and class A

优点

SafeAny比std::any增加了错误位置,错误类型转换说明,方便问题定位

参考

GitHub - facontidavide/SafeCppAny: Extension of std::any with small object optmization and safe numeric conversion.


创作不易,小小的支持一下吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码力码力我爱你

创作不易,小小的支持一下吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值