You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将boost::histogram作为类成员并在构造函数中初始化?

正确将boost::histogram作为类成员的方法

问题根源分析

你遇到的编译错误本质是类型不匹配:boost::histogram::histogram的第一个模板参数要求是轴类型的std::tuple——哪怕只有单个轴,也需要用tuple包裹。你之前的代码里axes_t直接使用单个axis::regular<>类型,和make_histogram返回的histogram类型(轴参数为tuple)不兼容,导致赋值操作触发编译错误。

正确解决方案

方案1:手动指定轴的tuple类型,用成员初始化列表构造

修正轴类型的定义,用std::tuple包裹轴类型,然后在构造函数的成员初始化列表中直接初始化histogram,避免默认构造后再赋值的冗余操作:

#include <boost/histogram.hpp>
#include <tuple>

struct HolderOfStaticHistogram {
    // 单个轴也要用tuple包裹
    using axes_t = std::tuple<boost::histogram::axis::regular<>>;
    using hist_t = boost::histogram::histogram<axes_t>;
    hist_t hist_;

    // 成员初始化列表直接构造,仅初始化一次
    HolderOfStaticHistogram() 
        : hist_(boost::histogram::make_histogram(boost::histogram::axis::regular<>(5, 0, 1))) {}
};

int main() {
    auto hist_container = HolderOfStaticHistogram();
}

方案2:用decltype推导类型,结合成员初始化列表避免重复构造

你的临时方案用decltype推导类型是可行的,但之前的写法会先默认构造hist再赋值,导致两次构造。改成成员初始化列表直接构造即可解决这个问题:

#include <boost/histogram.hpp>

class HistContainer {
public:
    using axis_t = boost::histogram::axis::regular<>;
    // 用decltype推导make_histogram的返回类型
    using hist_t = decltype(boost::histogram::make_histogram(axis_t(10, 0, 10)));
    hist_t hist;

    // 直接在初始化列表构造,仅构造一次
    HistContainer() : hist(boost::histogram::make_histogram(axis_t(10, 0, 10))) {}
};

int main() {
    auto hist_container = HistContainer();
}

方案3:C++17+ 用auto成员变量简化声明

C++17及以上支持非静态成员变量用auto推导类型,直接在声明时初始化,无需手动指定复杂的模板参数,且仅构造一次对象:

#include <boost/histogram.hpp>

class HistContainer {
public:
    // 直接推导类型并初始化
    auto hist = boost::histogram::make_histogram(boost::histogram::axis::regular<>(10, 0, 10));

    // 若需要参数化初始化,可重载构造函数
    HistContainer(int bins, double start, double end)
        : hist(boost::histogram::make_histogram(boost::histogram::axis::regular<>(bins, start, end))) {}
};

int main() {
    auto hist_container = HistContainer();
    auto hist_container2 = HistContainer(20, 0, 20);
}

内容的提问来源于stack exchange,提问作者Joey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 02:34:52