是否可以继承boost::histogram并在运行时设置坐标轴?
关于boost::histogram使用的两个问题解答
是否可以继承boost::histogram类
- 完全不推荐继承
boost::histogram的核心实现类,该库的设计采用值语义与组合模式,核心类没有定义虚析构函数,直接继承会引发析构异常、内存泄漏等问题。 - 如果需要扩展直方图的自定义功能,优先采用组合方案:将
boost::histogram实例作为自定义直方图类的成员变量使用,在自定义类里封装需要的额外逻辑即可。
是否可以在运行时完成坐标轴的设置
- 完全支持运行时设置坐标轴,boost.histogram提供了
boost::histogram::axis::variant动态轴类型,可以将多个编译期确定的轴类型包装为同一个动态类型,运行时再根据业务需求实例化具体的坐标轴参数。 - 若需要运行时确定直方图维度,可配合
boost::histogram::make_dynamic_histogram接口使用,无需在编译期提前确定维度数量。 - 简单使用示例:
#include <boost/histogram.hpp> namespace bh = boost::histogram; int main() { // 运行时获取的坐标轴参数,可来自配置、用户输入等 int bin_count = 20; double range_min = 0, range_max = 200; // 运行时构造坐标轴,支持多轴类型混合 using DynamicAxis = bh::axis::variant<bh::axis::regular<double>, bh::axis::integer<int>>; DynamicAxis ax = bh::axis::regular<>(bin_count, range_min, range_max); // 运行时构造直方图 auto dynamic_hist = bh::make_histogram(ax); return 0; }
内容的提问来源于stack exchange,提问作者Elias
相关产品推荐
相关产品推荐

