【发布时间】:2013-06-08 15:44:16
【问题描述】:
我在使用新的返回值语法为 const 而不是 const getter 函数提供正确重载时遇到问题。
在我的班级PhysicalNode 中,我使用新的返回值语法定义了一个getter 函数。这是必需的,因为 getter 的返回类型取决于成员的类型。
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 工作。但是由于您的回答,我现在知道如何避免这种情况:)
-
好的,很高兴它有帮助:)