使用关键字使公共成为受保护的重载方法

时间:2014-11-13 18:19:25

标签: c++ unit-testing using

我试图搜索此问题的解决方案,但我找不到任何问题。 这是我的班级:

class X;
class MyClass
{
  public:
    MyClass();

  protected:
    // ctor for unit test
    MyClass(std::shared_ptr<X> p_x);
};

在单元测试中:

class FakeClass : public MyClass
{
  public:
    using MyClass::MyClass;
};

在测试中我想使用它:

FakeClass myFake(std::shared_ptr<X>(new X));

但是g ++说:

  

MyClass :: MyClass(s​​td :: shared_ptr)受保护

如何指定使用的确切方法?

1 个答案:

答案 0 :(得分:1)

FakeClass可以使用MyClass构造函数,但无论您从哪里构建FakeClass,都可以 - 它不是朋友或派生的类型。

您必须编写public FakeClass构造函数,而这必须是调用MyClass受保护构造函数的内容:

FakeClass(std::shared_ptr<X> p)
: MyClass(p)
{ }