// Copyright 2020 Hans Dembinski // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt // or copy at http://www.boost.org/LICENSE_1_0.txt) //[ guide_histogram_in_api #include #include // function accepts any histogram and returns a copy template boost::histogram::histogram any_histogram( boost::histogram::histogram& h) { return h; } // function only accepts histograms with fixed axis types and returns a copy template boost::histogram::histogram, Storage> only_static_histogram( boost::histogram::histogram, Storage>& h) { return h; } // function only accepts histograms with dynamic axis types and returns a copy template boost::histogram::histogram>, Storage> only_dynamic_histogram( boost::histogram::histogram>, Storage>& h) { return h; } int main() { using namespace boost::histogram; auto histogram_with_static_axes = make_histogram(axis::regular<>(10, 0, 1)); using axis_variant = axis::variant, axis::integer<>>; std::vector axes; axes.emplace_back(axis::regular<>(5, 0, 1)); axes.emplace_back(axis::integer<>(0, 1)); auto histogram_with_dynamic_axes = make_histogram(axes); assert(any_histogram(histogram_with_static_axes) == histogram_with_static_axes); assert(any_histogram(histogram_with_dynamic_axes) == histogram_with_dynamic_axes); assert(only_static_histogram(histogram_with_static_axes) == histogram_with_static_axes); assert(only_dynamic_histogram(histogram_with_dynamic_axes) == histogram_with_dynamic_axes); // does not compile: only_static_histogram(histogram_with_dynamic_axes) // does not compile: only_dynamic_histogram(histogram_with_static_axes) } //]