У меня есть функция под названием FunctionCombiner (базового типа ValuationFunction), которая содержит другие функции оценки, например:
class FunctionCombiner : public valuationFunction
{
public:
FunctionCombiner(std::vector<std::shared_ptr<valuationFunction>>& Inner_);
void ValueInstrument();
std::vector<std::string> GetuniqueIdentifier() const;
void RiskFactorAdd(double increment, RiskFactor simulatedRiskFactor);
void RiskFactorMultiply(double factor, RiskFactor simulatedRiskFactor);
virtual valuationFunction* clone() const;
private:
std::vector<std::shared_ptr<valuationFunction>> Inner;
};
Мне нужно создать функцию, которая возвращает ссылки на эти «внутренние» функции, но Я не уверен, как go об этом, все, что я пробовал, похоже, синтаксически не работает. Если бы я возвращал только ссылку (не внутри вектора), я бы go об этом сказал бы так:
valuationFunction& FunctionCombiner ::GetInner()
{
return *this;
}
Я пытался вернуть что-то вроде std::vector< valuationFunction&>
, но компилятор, похоже, не очень нравится. Как правильно сообщить об этом go?
Конечная цель - собрать все эти ссылки на внутренние функции (из нескольких FunctionCombiners или различных функций оценки), чтобы сравнить их и отсортировать дубликаты позже.
EDIT: Из ответа Я реализовал функцию, которая возвращает внутреннюю ссылку, как показано ниже: Мои функции теперь выглядят так для «внутренних» классов:
std::vector<std::reference_wrapper<valuationFunction>> StockPriceFunction::GetInnerReference()
{
std::vector<std::reference_wrapper<valuationFunction>> innerVector(1);
innerVector.push_back(std::ref(*this));
return innerVector;
}
И вот так для комбайнера:
std::vector<std::reference_wrapper<valuationFunction>> FunctionCombiner::GetInnerReference()
{
std::vector<std::reference_wrapper<valuationFunction>> innerVector(Inner.size());
for (unsigned long i = 0; i < Inner.size(); ++i) {
std::vector<std::reference_wrapper<valuationFunction>> innerInnerVector = Inner[i]->GetInnerReference();
innerVector.insert(innerVector.end(), innerInnerVector.begin(), innerInnerVector.end());
}
return innerVector;
}
Но он не компилируется и не выдает странные ошибки, что я здесь делаю не так?