我目前使用带有多个参数的模板类,
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。这就是标准库容器提供所有类型定义的原因之一。例如,如果模板 A
是 std::vector
,你可以这样做:template <class A> class M
{
typedef typename A::value_type B;
};
关于c++ - 使用模板模板参数的替代方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20075542/