如何使用具有继承和模板的朋友类

时间:2013-12-11 09:51:12

标签: c++ templates inheritance friend

我有一个特殊的配置要构建,我不知道如何写这个:

template <typename VarType>
class A
{
  protected:
    VarType m_myVar;
}

template <typename VarType>
class B : public A<VarType>
{
}

class C : public B<SpecialType>
{
  void DoSomething()
  {
    m_myVar.PrivateFunction();
  }
}

class SpecialType
{
  private:
    void PrivateFunction()
    {
      //Do something
    }
} 

如何使用关键字朋友使其有效?

感谢您的回答。

2 个答案:

答案 0 :(得分:1)

只需声明CSpecialType的朋友......

class SpecialType
{
  private:
    friend class C;
    void PrivateFunction()
    {
      //Do something
    }
};

答案 1 :(得分:0)

在理想的世界中,您可以在SpecialType类decl中编写friend C::DoSomething();, 但是,不,你的唯一选择似乎是friend class C;(根据nyrl)

不完整类型的朋友和前方声明并不像我们希望的那样好。