我正在尝试测试我的类的受保护方法和构造函数。为此,我尝试使用C++11的using
关键字对其进行子类化,并重新将其成员公开为公共成员:
class Foo {
protected:
Foo(int i) {}
void run() {}
};
class TestableFoo : public Foo {
public:
using Foo::Foo;
using Foo::run;
};
int main() {
TestableFoo foo(7);
foo.run();
}
然而,无论是g++还是clang++都无法编译它,会产生以下错误:
test.cpp:13:15: error: ‘TestableFoo::TestableFoo(int)’ is protected
using Foo::Foo;
^
test.cpp:18:16: error: within this context
TestableFoo foo(7);
^
即使 run
方法变为公共方法,TestableFoo
构造函数仍然是受保护的(我已经单独确认过)。为什么会这样?我可以理解继承和覆盖可见性的任何一种决策,但为什么方法和构造函数之间存在不一致性?