如何在模板类中使用嵌套类作为类型?

时间:2019-05-08 03:55:54

标签: c++

我在a.hpp文件中具有以下模板类。

template < typename GraphR,
       typename AbsV,
       typename GraphT = GraphTs< GraphR > >
class ForwardF {

   public:
  class AbsVC{
          Some definitions};

};

我还有另一个要使用AbsVC类型的类,如下所示。

#include <a.hpp>

template < typename GraphR,
       typename AbsV,
       typename GraphT = GraphTs< GraphR > >
class Interleave
: public ForwardF< GraphR, AbsV, GraphT > {


private:
  using InTable = std::unordered_map< GraphT, std::vector<AbsVC>>;

 };

我收到一个错误,即未在此范围内定义AbsVC。请注意,ForwardF是基类,Interleave是派生类。因此,在基类中定义的AbsVC在派生类中应该可见。请告诉我如何解决这个问题。

1 个答案:

答案 0 :(得分:3)

  

因此在基类中定义的AbsVC在派生类中应该可见。

对于普通类,这是正确的,但对于模板类,则不是。

您需要特别提及AbsVC是一个typename,它依赖于带有某些模板参数的类模板ForwardF

因此您可以在类模板Interleave中进行此操作。

using AVC = typename ForwardF<GraphR, AbsV, GraphT>::AbsVC;

,然后将InTable定义为:

using InTable = std::unordered_map< GraphT, std::vector<AVC>>;

这应该有效。由于我没有MCVE,因此无法验证。