gpt4 book ai didi

c++ - boost::spirit::hold_any 是如何工作的?

转载 作者:可可西里 更新时间:2023-11-01 16:46:32 26 4
gpt4 key购买 nike

Evidently hold_any 的性能优于 boost::any。它是如何做到这一点的?

编辑:感谢 Mat 的评论,我找到了一个 answer by hkaiser关于 hold_any 在另一个问题,但它缺乏细节。欢迎提供更详细的答案。

最佳答案

我认为原因之一是因为 boost::hold_any 使用模板元编程方法,而 boost::any 使用继承方法。

在内部,boost::spirit::hold_any 使用 void* 存储“值”并使用另一个对象来跟踪数据类型信息:

>> boost/spirit/home/support/detail/hold_any.hpp
template <typename Char>
class basic_hold_any
{
....
spirit::detail::fxn_ptr_table<Char>* table;
void* object;
...
}

boost::any 使用 holder 存储“值”,它不需要另一个对象来跟踪数据类型信息。 holder 继承自 placeholder,因此具有继承缺陷。

>> boost/any.hpp
class any
{
...
placeholder * content;
...
}


class placeholder
template<typename ValueType>
class holder : public placeholder
{
...
ValueType held;
...
}

...性能差异更多地在于调用构造函数和析构函数,但即使对于转换,boost::spirit::hold_any 也应该更快。

关于c++ - boost::spirit::hold_any 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13321140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com