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

  • 本文关键字:参数 继承 默认 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模板参数的顺序和数量(但是这个条件不太重要)。还有别的办法吗?

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

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

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

最新更新