c++模板不止一个原型

c++ templates more than one prototype

本文关键字:一个 原型 不止 c++      更新时间:2023-10-16

我有一个相对复杂的模板,里面有很多参数(大多数都有默认值)。例如:

template <typename I,
typename S = BasicS<I>,
typename C = BasicC<I>,
typename E = BasicE<I> >
class Foo ...

不幸的是,无论我选择什么顺序的论点,总有一些情况下你可能只想改变最后一个。

说,我如何为同一个模板创建更多的原型

template <typename I,
typename E>
class Foo1 : Foo<I, BasicS<I>, BasicC<I>, E >
{
... redefine the constructors
};

但是没有继承以避免重新定义构造函数的需要

您可以使用C++11的模板别名实现这一点:

template <typename I, typename E>
using Foo1 = Foo<I, BasicS<I>, BasicC<I>, E>;

假设(根据您的评论)您不能使用C++11,您可以使用嵌套的typedef:

template <typename I, typename E>
struct Foo1 {
typedef Foo<I, BasicS<I>, BasicC<I>, E> type;
};
template <typename I, typename C>
struct Foo2 {
typedef Foo<I, BasicS<I>, C> type;
};

然后会这样使用:

Foo1<MyI, MyE>::type myFoo;

当然,您也可以将原始的Foo重命名为GenericFoo或其他什么,并为其提供一个带有typedef的Foo结构,以便提供一致的接口。

假设您可以接受不同的名称,则可以使用using别名:

template <typename I, typename E>
using Foo1 = Foo<I, BasicS<I>, BasicC<I>, E>;