有没有办法获得std::any
存储的数据的大小(以字节为单位)?我提出的唯一解决方法是按std::any::type
查询其值的类型,并将结果与my_any.type() == typeid(T)
等已知类型列表进行比较,然后大小为sizeof(T)
。不幸的是,此解决方案仅在事先知道类型时才有效。
你知道任何解决方案吗?
答案 0 :(得分:3)
std::any
未提供对基础存储类型T
执行操作的任何方法。但是,初始化/分配给sizeof(T)
时,std::any
等信息可用。
一种可能的解决方案是围绕std::any
创建自己的包装器,以跟踪大小。 E.g。
class my_any : std::any
{
std::size_t _stored_size = 0;
public:
template <typename T>
my_any(T&&) : _stored_size{sizeof(std::decay_t<T>)} { }
// ...
};
答案 1 :(得分:3)
你不能获取std::any
所持对象的大小(除了你提到的解决方法)。 std::any
是类型擦除的 minimal 实现。
如果您想要更强大的功能,请自行编写(它并不难,只需在std::any
或boost::any
上进行建模并添加size()
功能)。
您可能希望向any
添加许多其他内容,例如I / O,将多个数据(或任何容器的内容)存储为数组等。
以额外的数据成员为代价(存储大小),您也可以通过编写包装来扩展std::any
,如Vittorio的answer所示。