所以假设我有一个包含很多模板参数的类,其中之一是使用 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/

10-11 17:52