有什么方法可以获取存储的数据的大小(以字节为单位)std::any
?我想出的唯一解决方法是查询其值的类型,std::any::type
并将结果与已知类型的列表进行比较,例如my_any.type() == typeid(T)
,大小为sizeof(T)
. 不幸的是,此解决方案仅在预先知道类型时才有效。
你知道有什么解决办法吗?
有什么方法可以获取存储的数据的大小(以字节为单位)std::any
?我想出的唯一解决方法是查询其值的类型,std::any::type
并将结果与已知类型的列表进行比较,例如my_any.type() == typeid(T)
,大小为sizeof(T)
. 不幸的是,此解决方案仅在预先知道类型时才有效。
你知道有什么解决办法吗?
std::any
不提供对底层存储类型执行操作的任何方式T
。但是,sizeof(T)
初始化/分配给std::any
.
一种可能的解决方案是创建自己的包装器来std::any
跟踪大小。例如
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>)} { }
// ...
};
您无法获得所持有的对象的大小std::any
(除了您提到的解决方法)。std::any
是类型擦除的最小实现。
如果您想要更强大的东西,请自己编写(这并不难,只需对其进行建模std::any
或boost::any
添加size()
功能即可)。您可能还需要添加许多其他内容any
,例如 I/O、将多个数据(或任何容器的内容)存储为数组等。
以额外的数据成员(存储大小)为代价,您还可以std::any
通过编写包装器来扩展,如 Vittorio 的回答中所建议的那样。