我目前使用带有多个参数的模板类,

template<class A, class B> class M{ };

但是,在类 A 的位置我想插入一个模板类,比如
template<class C> class A{ };

我找到的唯一解决方案是使用模板模板参数:
template< template<class C> class A, class B> class M{ };

在我的实现中,我使用的 A 的唯一参数化是 A<B> 。我不需要使用不同参数对 A 进行多次实例化,例如我不需要在 A<int> 中实例化 A<double> A<long double>M

是否有模板模板参数的替代方法?我问的原因是对这个 thread 的跟进,在他的回答中@Evan Teran 说他只有一次必须使用模板模板参数......

我想我的问题的一个转折是:使用模板模板参数有缺点吗?

最佳答案

假设 B 可以从 A<B> 以某种方式确定,您可以只采用一个模板参数:

template <class A> class M
{
  typedef typename A::The_B_Type B;
};

当然, The_B_Type 必须是 A<B> 中的有效 typedef。这就是标准库容器提供所有类型定义的原因之一。例如,如果模板 Astd::vector ,你可以这样做:
template <class A> class M
{
  typedef typename A::value_type B;
};

关于c++ - 使用模板模板参数的替代方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20075542/

10-13 06:58