给定以下类:
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
的模板参数的顺序和数量(但这个条件不太重要)。有什么替代品吗?
答案 0 :(得分:2)
如果您的所有参数都属于同一类型(类型、非类型或模板),您可以让 B
接受一个参数包
template<typename... Args>
class B : public A<Args...> {
// ...
};
这会将相应的参数转发给 A
,或者如果包不够长则使用默认值。