gpt4 book ai didi

c++ - 修改boost多索引容器项

转载 作者:太空宇宙 更新时间:2023-11-04 12:26:32 25 4
gpt4 key购买 nike

struct tagEnumdef{}; struct tagName{}; struct tagWidget{};
template< class type > class ParamTags;
template<> class ParamTags<int> { public: typedef tagEnumdef tag; };
template<> class ParamTags<QString> { public: typedef tagName tag; };
template<> class ParamTags<QWidget*>{ public: typedef tagWidget tag; };

typedef boost::multi_index::multi_index_container
<
ParamRegistrationEntry,
boost::multi_index::indexed_by
<
boost::multi_index::ordered_unique< boost::multi_index::tag<tagEnumdef>, BOOST_MULTI_INDEX_CONST_MEM_FUN( ParamRegistrationEntry, int, enumdef ) >,
boost::multi_index::ordered_unique< boost::multi_index::tag<tagName>, BOOST_MULTI_INDEX_CONST_MEM_FUN( ParamRegistrationEntry, QString, name ) >,
boost::multi_index::ordered_unique< boost::multi_index::tag<tagWidget>, BOOST_MULTI_INDEX_CONST_MEM_FUN( ParamRegistrationEntry, QWidget*, widget ) >
>
>
> ParamRegisterIndexContainer;

T t_; // int, QString or QWidget*
ParamRegisterIndexContainer* const register_;
register_->modify( register_->get<ParamTags<T>::tag>().find( t_ ), ... ); // C2664


error C2664: 'bool boost::multi_index::detail::ordered_index<KeyFromValue,Compare,SuperMeta,TagList,Category>::modify<boost::lambda::lambda_functor<T>>(boost::multi_index::detail::bidir_node_iterator<Node>,Modifier)' :
cannot convert parameter 1
from 'boost::multi_index::detail::bidir_node_iterator<Node>'
to 'boost::multi_index::detail::bidir_node_iterator<Node>'

With
Node=ordered_index_node<index_node_base<...>>
Node=ordered_index_node<ordered_index_node<ordered_index_node<index_node_base<...>>

我已经删除了无关紧要的部分。 3 个 ordered_index_node 是否与我在容器中定义的 3 个键相关?我使用 get() 从 1 个索引获取迭代器,但 modify() 似乎需要某种组合?

最佳答案

据我所知,modify() 应该在索引上调用,而不是在容器上调用。所以你想写的可能更像是:

typedef typename ParamTags<T>::tag TagType;

// Get the proper index
ParamRegisterIndexContainer::index<TagType>::type& index = register_->get<TagType>();

// Modify a value found in this index
index.modify(index.find(t_), ...);

关于c++ - 修改boost多索引容器项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2184276/

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