具有相同默认模板参数的继承

时间:2021-01-29 10:39:51

标签: c++

给定以下类:

template<typename BoringArg1 = int,
         typename BoringArg2 = char,
         typename ThisDefinitionIsSoLong = int,
         typename WhoWroteThis = double>
class A {
    // ...
};

现在我想从 A 继承,保持模板化:

template<typename BoringArg1 = int,
         typename BoringArg2 = char,
         typename ThisDefinitionIsSoLong = int,
         typename WhoWroteThis = double>
class B : public A<BoringArg1, BoringArg2, ThisDefinitionIsSoLong, WhoWroteThis> {
    // ...
};

如您所见,模板化参数是重复的。有可能避免这种情况吗?此外,A 的默认参数可能会更改。最好在 B 中反映这些更改而不修改 B 中的代码。我看到的一个解决方案是制作一堆模板类型DefaultTypeXXX。这有点乏味,并不能真正改变 A 的模板参数的顺序和数量(但这个条件不太重要)。有什么替代品吗?

1 个答案:

答案 0 :(得分:2)

如果您的所有参数都属于同一类型(类型、非类型或模板),您可以让 B 接受一个参数包

template<typename... Args>
class B : public A<Args...> {
// ...
};

这会将相应的参数转发给 A,或者如果包不够长则使用默认值。