Как объявить std :: vector гистограмм повышения? Какой тип гистограммы повышения? - PullRequest
3 голосов
/ 27 мая 2020

В настоящее время я работаю над проектом, в котором мне нужно работать с std :: vector гистограмм повышения.

Проблема, с которой я столкнулся, заключается в том, что я не могу найти правильный тип гистограммы повышения . Я допускаю свою последнюю попытку в коде ниже.

Вот пример кода ситуации:

#include <boost/format.hpp>
#include <boost/histogram.hpp>
#include <boost/histogram/serialization.hpp> // includes serialization code

int main() {
    using namespace boost::histogram;

    // Creation of the histogram.
    auto h = make_histogram(axis::regular<double> {3, 0.0, 1.0, "x"},
                            axis::regular<double> {3, 0.0, 1.0, "y"},
                            axis::regular<double> {3, 0.0, 1.0, "z"},
                            axis::regular<double, axis::transform::log> {3, 1.0, 230.0, "Energy_log"});

        h(0.1,0.1,0.1,70);
        h(0.1,0.1,0.1,100);
        h(0.1,0.1,0.1,200);

        //std::vector<*Boost_histogram_TYPE*> histograms4D;

        std::vector<boost::histogram::histogram<boost::histogram::axis::variant, boost::histogram::unlimited_storage>> histograms4D;

        histograms4D.push_back(h);

} 

Кто-нибудь уже сталкивался с такой ситуацией?

I уже спасибо за вашу помощь,

Eliott

Ответы [ 2 ]

3 голосов
/ 27 мая 2020

Вы можете просто назвать тип, если у вас есть объект этого типа:

using boost_histogram = decltype(h);

и когда у вас есть тип, вы можете использовать его следующим образом:

std::vector<boost_histogram> histograms4D;

Вот демо .

1 голос
/ 27 мая 2020

При использовании c ++ 17 используйте вывод аргументов шаблона конструктора:

Live On Coliru

#include <boost/archive/text_oarchive.hpp>
#include <boost/histogram.hpp>
#include <iostream>

int main() {
    using namespace boost::histogram;

    auto h = make_histogram(
            axis::regular<double> {3, 0.0, 1.0, "x"},
            axis::regular<double> {3, 0.0, 1.0, "y"},
            axis::regular<double> {3, 0.0, 1.0, "z"},
            axis::regular<double, axis::transform::log> {3, 1.0, 230.0, "Energy_log"});

    h(0.1,0.1,0.1,70);
    h(0.1,0.1,0.1,100);
    h(0.1,0.1,0.1,200);

    std::vector histograms4D {h};
}
...