using 声明能否仅引用基于 const 限定的特定重载?

Posted

技术标签:

【中文标题】using 声明能否仅引用基于 const 限定的特定重载?【英文标题】:Can a using declaration refer only to a specific overload based on const qualification? 【发布时间】:2021-12-30 18:32:40 【问题描述】:

如果基类有一个函数的 const 和 non-const 版本,我可以在派生类中通过 using 关键字只引用一个或另一个吗?

struct Base

protected:
    int x = 1;

    const int&  getX() const     return x;
    int&        getX()           return x;
;

struct Derived : public Base

public:
    using Base::getX; // Can we refer to the const or the non-const only?
;

如果没有,在不重复函数体的情况下,让 const getX() 在 Derived 中公开的最简单方法是什么?

【问题讨论】:

const int& getX() const return Base::getX(); 或许看看这个***.com/questions/38086698/inherit-from-const-class 【参考方案1】:

using 总是带来给定名称的整个重载集。您不能为特定函数调用 using,只能为其名称调用,其中包括该名称的所有用途。

您必须使用您喜欢的签名编写函数的派生类版本,该版本调用基类。最简单的方法是使用decltype(auto) getX() const return Base::getX();

【讨论】:

以上是关于using 声明能否仅引用基于 const 限定的特定重载?的主要内容,如果未能解决你的问题,请参考以下文章

声明和定义,const,enum,头文件

声明和定义,const,enum,头文件

深入理解C++的const限定符

const限定符

成员函数上的 const 引用限定符 [重复]

为啥 const rvalue 限定 std::optional::value() 返回 const rvalue 引用?