我有一个带有这些重载的函数:
A& f(B& b)
{
return b.a;
}
const A& f(const B& b)
{
return b.a;
}
return 语句可以是一个更复杂的逻辑,如果b
是 const,它会返回一些 const 值。例如,B
是一个容器容器(可能具有更深的嵌套),我们正在搜索一个元素。在这种情况下,复制函数不是一个好主意。是否有任何替代方法可以达到相同的结果?
我可以想到一些解决方案,但我不是很喜欢它们。
template <typename T>
auto f(T& b) -> decltype(b.a)
{
return b.a;
}
它可以工作,但如果b.a
不是那么微不足道(如容器中的 with ),它就会变得复杂。
A& f(B& b)
{
return b.a;
}
const A& f(const B& b)
{
return f(const_cast<B&>(b));
}
这也有效,但如果感觉像一个黑客。有没有简单干净的解决方案?