是否可以为成员的方法编写using声明,类似于inherented方法?

时间:2017-08-07 07:58:49

标签: c++ c++17

可以将using声明写入例如将私有基类方法提升为派生类中的公共方法,即示例中的B::foo。是否有可能做一些类似于使方法可用而无需编写另一种方法

#include <iostream>

class A
{
    int m_number{ 99 };
protected:
    int foo() { return m_number; }
};

class B : public A
{
public:
    using A::foo;
};

class C
{
    B m_a;
public:
    using foo() = m_a.foo(); // is something like this possible?
};


int main() { 
    B b;
    std::cout<<b.foo();

    C c;
    std::cout<<c.foo();
}

1 个答案:

答案 0 :(得分:4)

不可能这样做。为了理解原因,您需要了解using声明的目的是通过使名称出现在最初声明它的位置的其他位置来影响名称查找算法。

B中的声明:

using A::foo;

会导致查找foo范围内的名称B以查找成员A::foo。它不会创建一个新的foo方法,将B*作为this指针,并将调用转发给A::foo;它只会使函数A::foo出现在其他地方(即B)。

using声明不能导致生成任何新代码,例如通过调用成员上的方法转发调用所需的代码。如果你想要一个新方法,你只需要自己编写。