如何为Boost.Icl自定义Combine函子提供自定义逆操作?
Boost.Icl自定义Combine函子的逆操作实现问题
Boost.Icl提供了若干内置的Combine函子及其对应的逆操作,但自定义函子时,其逆操作默认始终是boost::icl::inplace_erasure,我无法找到为自定义函子指定自定义逆操作的方法。
我目前通过创建一个使用原函子逆操作的独立interval_map来实现需求,代码示例如下:
#include <iostream> #include <boost/icl/interval_map.hpp> using namespace boost::icl; template <class Type> struct functor : boost::icl::identity_based_inplace_combine<Type> { void operator()(Type& object, const Type& operand) const { object = 5; //示例操作 } }; template <class Type> struct inversed_functor : boost::icl::identity_based_inplace_combine<Type> { void operator()(Type& object, const Type& operand) const { object = 10; //示例逆操作 } }; int main() { interval_map<int, int, partial_absorber, std::less, functor> imap; interval_map<int, int, partial_absorber, std::less, inversed_functor> toggler; imap += make_pair(interval<int>::right_open(0, 4), 2); imap += make_pair(interval<int>::right_open(6, 8), 1); toggler += make_pair(interval<int>::right_open(2, 10), 2); toggler += imap; imap.clear(); for (auto& v : toggler) imap += v; std::cout << imap << std::endl << toggler; }
但这种实现方式过于繁琐,请问符合Boost.Icl设计理念的合理实现方式是什么?
内容的提问来源于stack exchange,提问作者Rabter
相关产品推荐
相关产品推荐

