boost::icl::interval 和 boost::numeric::interval 是否有可用的适配层?
boost::icl::interval and boost::numeric::interval is there an adaption layer available?
我一直在使用 boost::numeric::interval everywhere in my code. Now I've started using the boost interval container library。是否存在适应 header 以便我可以将 boost::numeric::interval 间隔放入 boost::icl 容器?
我已经按照 customization docs 中针对 boost::icl 的建议尝试了以下代码,但它没有使用多行模板专业化失败消息进行编译。如果您想查看错误消息,可以在
处尝试实时代码
https://wandbox.org/permlink/P8VzcdbjQQzf43yU
下面也是我写的代码
适配代码
#include <boost/icl/interval_set.hpp>
#include <boost/numeric/interval.hpp>
namespace boost{ namespace icl
{
// Class template interval_traits serves as adapter to register and customize your interval class
template<typename T>
struct interval_traits< boost::numeric::interval<T> >
{
typedef boost::numeric::interval<T> interval_type;
typedef T domain_type;
typedef std::less<T> domain_compare;
static interval_type construct(const domain_type& lo, const domain_type& up)
{ return interval_type(lo, up); }
//3.2 Selection of values
static domain_type lower(const interval_type& inter_val){ return inter_val.lower(); };
static domain_type upper(const interval_type& inter_val){ return inter_val.upper(); };
};
template<typename T>
struct interval_bound_type<boost::numeric::interval<T> > //4. Finally we define the interval borders.
{ // Choose between static_open (lo..up)
typedef interval_bound_type type; // static_left_open (lo..up]
BOOST_STATIC_CONSTANT(bound_type, value = boost::icl::interval_bounds::static_closed);
}; // and static_closed [lo..up]
}} // namespace boost icl
测试代码
int main()
{
boost::numeric::interval<double> i = boost::numeric::hull(1.0,2.0);
boost::icl::interval_set<double, std::less, boost::numeric::interval<double>> iSet;
iSet.insert(i);
}
解决方法是使用
boost::icl::interval_bounds::static_left_open
boost::icl::interval_bounds::static_right_open
喜欢下面
template<typename T>
struct interval_bound_type<boost::numeric::interval<T> >
{
typedef interval_bound_type type;
BOOST_STATIC_CONSTANT(bound_type, value =
boost::icl::interval_bounds::static_left_open);
};
定义间隔类型时。 interval_bounds 上的其他选项不起作用。
我一直在使用 boost::numeric::interval everywhere in my code. Now I've started using the boost interval container library。是否存在适应 header 以便我可以将 boost::numeric::interval 间隔放入 boost::icl 容器?
我已经按照 customization docs 中针对 boost::icl 的建议尝试了以下代码,但它没有使用多行模板专业化失败消息进行编译。如果您想查看错误消息,可以在
处尝试实时代码https://wandbox.org/permlink/P8VzcdbjQQzf43yU
下面也是我写的代码
适配代码
#include <boost/icl/interval_set.hpp>
#include <boost/numeric/interval.hpp>
namespace boost{ namespace icl
{
// Class template interval_traits serves as adapter to register and customize your interval class
template<typename T>
struct interval_traits< boost::numeric::interval<T> >
{
typedef boost::numeric::interval<T> interval_type;
typedef T domain_type;
typedef std::less<T> domain_compare;
static interval_type construct(const domain_type& lo, const domain_type& up)
{ return interval_type(lo, up); }
//3.2 Selection of values
static domain_type lower(const interval_type& inter_val){ return inter_val.lower(); };
static domain_type upper(const interval_type& inter_val){ return inter_val.upper(); };
};
template<typename T>
struct interval_bound_type<boost::numeric::interval<T> > //4. Finally we define the interval borders.
{ // Choose between static_open (lo..up)
typedef interval_bound_type type; // static_left_open (lo..up]
BOOST_STATIC_CONSTANT(bound_type, value = boost::icl::interval_bounds::static_closed);
}; // and static_closed [lo..up]
}} // namespace boost icl
测试代码
int main()
{
boost::numeric::interval<double> i = boost::numeric::hull(1.0,2.0);
boost::icl::interval_set<double, std::less, boost::numeric::interval<double>> iSet;
iSet.insert(i);
}
解决方法是使用
boost::icl::interval_bounds::static_left_open
boost::icl::interval_bounds::static_right_open
喜欢下面
template<typename T>
struct interval_bound_type<boost::numeric::interval<T> >
{
typedef interval_bound_type type;
BOOST_STATIC_CONSTANT(bound_type, value =
boost::icl::interval_bounds::static_left_open);
};
定义间隔类型时。 interval_bounds 上的其他选项不起作用。