У меня есть проблема, обеспечивающая правильную перегрузку для функций const и not const getter с новым синтаксисом возвращаемого значения.Перегрузка синтаксиса возвращаемого значения const и не const function
В моем классе PhysicalNode
Я определил функцию геттера с новым синтаксисом возвращаемого значения. Это необходимо, так как тип возврата получателя зависит от типа элемента.
class PhysicalNode {
private:
solver::EnergySolver energySolver_; ///< The energy solver of this node
//solver::EnergyMomentumSolver energySolver_
public:
auto getEnergySolver()-> typename
std::add_lvalue_reference<decltype(PhysicalNode::energySolver_)>::type;
}
Однако я хочу также предоставить этот метод как const.
Обычно я бы использовал функцию перегрузки для определения функции const, а не const getter.
class PhysicalNode {
private:
solver::EnergySolver energySolver_;
public:
const solver::EnergySolver& getEnergySolver() const;
solver::EnergySolver& getEnergySolver();
}
Я попробовал следующее объявление функции, но она не работает:
const auto getEnergySolver() const-> typename
std::add_lvalue_reference<decltype(PhysicalNode::energySolver_)>::type;
Ошибка компиляции является:
PhysicalNode.cpp:72: error: invalid initialization of reference of type
'std::__add_lvalue_reference_helper<LbmLib::solver::EnergySolver, true,
false>::type {aka LbmLib::solver::EnergySolver&}' from expression of type
'const LbmLib::solver::EnergySolver'
Как мне нужно определить объявление функции для определения эта функция постоянна.
Почему вы используете 'typename'? Является ли 'PhysicalNode' шаблоном класса? –
Потому что я не получил работу decltype. Но из-за вашего ответа я знаю теперь, как этого избежать :) – tune2fs
ОК, рад, что это помогло :) –