我有一個問題,爲const提供正確的重載,而不是使用新的返回值語法提供const getter函數。重載const而不是const函數的返回值語法
在我的課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的工作。但因爲你的答案,我現在知道如何避免:) – tune2fs
好吧,很高興它幫助:) –