Oop 共享指针多态对象';s引用未正确传递
我有一个程序,其主要调用模拟类对象的方式如下Oop 共享指针多态对象';s引用未正确传递,oop,c++11,polymorphism,smart-pointers,Oop,C++11,Polymorphism,Smart Pointers,我有一个程序,其主要调用模拟类对象的方式如下 int number_of_sims = std::stoi(num_sims)/MAX_THREADS_SIM_THREADS; for (int inst=0; inst<Instruments.size(); inst++) { Simulation Simulations(Instruments[inst], Symbols[inst], number_of_sims); SimVector.pu
int number_of_sims = std::stoi(num_sims)/MAX_THREADS_SIM_THREADS;
for (int inst=0; inst<Instruments.size(); inst++)
{
Simulation Simulations(Instruments[inst], Symbols[inst], number_of_sims);
SimVector.push_back(Simulations);
}
bool XYZ::CalculateTau()
{
Logger::getLogger().log(DEBUG, "Calculating Tau .. ");
Logger::getLogger().log(DEBUG, "The size of the TS is: " + std::to_string(TS_.size()));
return true;
}
Strategy::Strategy(Instrument& instrument, String& Symbol)
: instrument_(instrument)
{
}
bool Strategy::Initialize()
{
TS_ = instrument_.GetTS();
return true;
}
现在,我在配置文件中对XYZ策略进行多态调用,如下所示
boost::shared_ptr<Strategy> Simulation::getStrategyName(String& StratName)
{
if (StratName.compare("XYZ") == 0)
return (boost::shared_ptr<Strategy>(new XYZ(instrument_, Symbol_)));
}
在CalculateTau函数中,我尝试获取已按以下方式初始化的TS_u向量的大小
int number_of_sims = std::stoi(num_sims)/MAX_THREADS_SIM_THREADS;
for (int inst=0; inst<Instruments.size(); inst++)
{
Simulation Simulations(Instruments[inst], Symbols[inst], number_of_sims);
SimVector.push_back(Simulations);
}
bool XYZ::CalculateTau()
{
Logger::getLogger().log(DEBUG, "Calculating Tau .. ");
Logger::getLogger().log(DEBUG, "The size of the TS is: " + std::to_string(TS_.size()));
return true;
}
Strategy::Strategy(Instrument& instrument, String& Symbol)
: instrument_(instrument)
{
}
bool Strategy::Initialize()
{
TS_ = instrument_.GetTS();
return true;
}
此处get TS执行以下操作:
class Instrument
{
public:
Instrument();
virtual ~Instrument();
LongToSymbolInfoPairVector GetTS() { return newTS_; }
private:
LongToSymbolInfoPairVector TS_, newTS_;
};
现在的问题是,我得到的这个大小的值是0
请帮忙让我知道,我哪里出了问题。我已经能够通过减少模拟->分析->仪器到仪器->模拟->分析->分析->策略的间接性来绕过这个问题。请尝试将您的示例简化为a-有大量未关联的成员变量和一些代码,这似乎与问题无关。当然,在最后,您仍然必须确保,您的示例仍然显示相同的错误。这使您和我们更容易找到问题的根源,并允许我们验证可能得出的任何答案。还要更清楚地解释您期望的结果。此外,表面上看,您不仅显示了太多不相关的代码,而且相关的代码似乎也丢失了,比如您在哪里调用initialize或calculate tau
bool XYZ::CalculateTau()
{
Logger::getLogger().log(DEBUG, "Calculating Tau .. ");
Logger::getLogger().log(DEBUG, "The size of the TS is: " + std::to_string(TS_.size()));
return true;
}
Strategy::Strategy(Instrument& instrument, String& Symbol)
: instrument_(instrument)
{
}
bool Strategy::Initialize()
{
TS_ = instrument_.GetTS();
return true;
}
class Instrument
{
public:
Instrument();
virtual ~Instrument();
LongToSymbolInfoPairVector GetTS() { return newTS_; }
private:
LongToSymbolInfoPairVector TS_, newTS_;
};