C++函数返回值自动推导的问题

最近在做的一个有关金融的开发项目遇到一个问题,在这项目中我创建了两个虚基类 BaseAccout基础账户类和BasePosition基础持仓类,并在此基础上创建了两个衍生账户类StockAccount和FutureAccount, 以及两个衍生持仓类 StockPosition和FuturePosition. 由于我需要在外部统一调用某个方法来获取到账户持仓(并不能确定是股票的持仓还是期货的持仓),所以这个函数的返回值希望是可以自动推导的,这个函数大概如下:

auto& get_pos(BaseAccout* acct, str& order_book_id){
    if (acct.type() == ACCT_TYPE::STOCK)
  {
    StockAccount * acc_stk = (StockAccount *) acct;
    auto pos = acct_stk.positions()[order_book_id]   // 返回stock_position的引用
    return pos;
    }
  else
  {
    FutureAccount* acc_fts = (FutureAccount*) acct;
    auto pos = acct_fts.positions()[order_book_id]   // 返回future_position的引用
    return pos;    // 此处报错,提示自动推导类型不一致
  }
}

如上所示,这个函数需要根据不同账户类型返回不同的持仓引用,有这样的需求,但是上述函数设计没法通过编译,请问大家有没有什么好的办法或者思路?

你可以把positions()挪到BaseAccount基类里,返回的是指向BasePosition指针的列表

你可以类似map中的pair,将两种类型封装成一种类型。然后根据需要使用这一种类型。