所以假设我有一个包含很多模板参数的类,其中之一是使用 CRTP 的派生类:
template <typename Derived, typename A, typename B, typename C, typename D>
class BaseFoo {
public:
BaseFoo(A& a) {}
};
我想继承它:
class DerivedFoo : public BaseFoo<DerivedFoo, Bc, Cc, Dc, Ec> {
public:
DerivedFoo(A& a) : BaseFoo<DerivedFoo, Bc, Cc, Dc, Ec>(a) {}
};
是否有任何技巧可以避免提及所有显式模板参数?
如果我仍然需要将
Derived
声明为模板参数,那也没关系。 最佳答案
如果基类是依赖的,只需使用派生类的名称并在其中查找基类名称。如果它不依赖,您可以将基类命名为不合格,因为它在范围内。不需要所有模板参数
class DerivedFoo : public BaseFoo<DerivedFoo, Bc, Cc, Dc, Ec> {
public:
DerivedFoo(A& a) : BaseFoo(a) {}
};
每个类都在其内部声明其名称。不仅是普通类,还有类模板实例。所以
BaseFoo
在自己的作用域和它的派生类的作用域内指的是BaseFoo<...>
。关于c++ - 调用父构造函数时如何避免模板参数上的样板,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32682936/