给定以下类:
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
模板参数的顺序和数量(但是这个条件不太重要)。还有别的办法吗?
如果你所有的参数都是相同的类型(类型、非类型或模板),你可以让B
接受一个参数包
template<typename... Args>
class B : public A<Args...> {
// ...
};
这将把相应的参数转发给A
,或者如果包不够长则使用默认值。