可以将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();
}
答案 0 :(得分:4)
不可能这样做。为了理解原因,您需要了解using
声明的目的是通过使名称出现在最初声明它的位置的其他位置来影响名称查找算法。
B
中的声明:
using A::foo;
会导致查找foo
范围内的名称B
以查找成员A::foo
。它不会创建一个新的foo
方法,将B*
作为this
指针,并将调用转发给A::foo
;它只会使函数A::foo
出现在其他地方(即B
)。
using
声明不能导致生成任何新代码,例如通过调用成员上的方法转发调用所需的代码。如果你想要一个新方法,你只需要自己编写。