gpt4 book ai didi

c++ - 许多 Boost::histogram 对象的动态分配

转载 作者:行者123 更新时间:2023-11-28 04:11:21 24 4
gpt4 key购买 nike

我需要动态创建(然后删除)许多 Boost::histogram 对象,每个对象具有不同数量的轴和 bin 边界,但我不认为我可以使用 make_histogram 工厂函数创建一个。它不返回指针,所以我无法删除该对象。任何人都可以提供示例代码来动态分配单个直方图吗?

最佳答案

我知道,查看代码并看到所有这些模板和 auto 返回类型可能会令人生畏。

你可以做的是让自己成为几个方便的工厂来获得一个唯一的(或共享的)指针:

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

template <class Storage, class Axis, class... Axes,
class = boost::histogram::detail::requires_axis<Axis>>
auto make_unique_histogram_with(Storage&& storage, Axis&& axis,
Axes&&... axes) {
auto a =
std::make_tuple(std::forward<Axis>(axis), std::forward<Axes>(axes)...);
using U = boost::histogram::detail::remove_cvref_t<Storage>;
using S = boost::mp11::mp_if<boost::histogram::detail::is_storage<U>, U,
boost::histogram::storage_adaptor<U>>;
return std::make_unique<boost::histogram::histogram<decltype(a), S>>(
std::move(a), S(std::forward<Storage>(storage)));
}

template <class Axis, class... Axes,
class = boost::histogram::detail::requires_axis<Axis>>
auto make_unique_histogram(Axis&& axis, Axes&&... axes) {
return make_unique_histogram_with(boost::histogram::default_storage(),
std::forward<Axis>(axis),
std::forward<Axes>(axes)...);
}

int main() {
auto histogram = make_unique_histogram(
boost::histogram::axis::regular<>(6, -1.0, 2.0, "x"));
(*histogram)(0.1, boost::histogram::weight(1.0));
}

代码取自 boost/histogram/make_histogram.hpp 并稍作修改。以类似的方式,您可以重写其余的助手。

提醒:您将需要一个 C++14 兼容的编译器。

关于c++ - 许多 Boost::histogram 对象的动态分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57718651/

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