xarray <double>возвращает нулевой вектор - PullRequest
0 голосов
/ 07 ноября 2019

Для начала я должен сказать, что работаю в visual studio 2019 и использую стандарт c ++ 17. Итак, у меня есть этот синглтон:

//DataFrame.h

class DataFrame;

using std::string;
using boost::unordered_map;
using xt::xarray;

class DataFrameDestroyer
{
private:
    DataFrame* p_instance;
public:
    ~DataFrameDestroyer();
    void initialize(DataFrame* p);
};

class DataFrame
{
    private:
        static DataFrame* p_instance;
        static DataFrameDestroyer destroyer;
        unordered_map<string, xarray<string>> factorNameColumns;
        unordered_map<string, xarray<double>> factorValueColumns;
    protected:
        DataFrame() { }
        DataFrame(const DataFrame&);
        DataFrame& operator=(DataFrame&);
        ~DataFrame() { }
        friend class DataFrameDestroyer;
    public : 
        static DataFrame& GetInstance();
        //...more code
        double GetLogLikeGradient(string dfactor, string dfvalue);
};

//DataFrame.cpp

#include "DataFrame.h"

DataFrame* DataFrame::p_instance = 0;
DataFrameDestroyer DataFrame::destroyer;

DataFrameDestroyer::~DataFrameDestroyer() {
    delete p_instance;
}
void DataFrameDestroyer::initialize(DataFrame* p) {
    p_instance = p;
}
DataFrame& DataFrame::GetInstance() {
    if (!p_instance) {
        p_instance = new DataFrame();
        destroyer.initialize(p_instance);
    }
    return *p_instance;
}

И я получил следующую проблему в функции GetLogLikeGradient :

//...
for (int row = 0; row < rowCount; row++) {

    for (auto valuelist : factorValueColumns) {
        double factorMultiplier = valuelist.second[row];
        //...
    }
    //more code...
}

Когда я пытаюсь получить значения из unordered_map factorValueColumns содержит только нулевые векторы xarray

Я не могу понять, что может вызвать такое поведение.

Конечно, factorValueColumns инициируется до этого. И в режиме отладки я вижу, что unordered_map factorValueColumns полон правильных векторов xarray непосредственно перед вызовом GetLogLikeGradient .

Также интересно, что factorNameColumns вэта функция содержит правильные векторы xarray. Так что, может быть, это просто хитрая ошибка xarray ...

...