我在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
在派生类中应该可见。请告诉我如何解决这个问题。
答案 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,因此无法验证。