当比方说,我有专业化使用多个typenames
template <typename T>
class F;
我可以创建另一个模板谁需要一个F
作为一种类型,具有默认和专业化未选中。
template <typename S>
class G;
template <>
template <typename T>
class G <F<T> >
{
};
我可以实例化G<F<int> > g_of_f
。编译器正确选择G
的专业化,并且一切都很好。
所以这是我的问题。我想在列表中使用多个模板类型名称来执行此操作。但是,当我尝试
template <typename U, typename S>
class H;
template <typename U>
template <typename T>
class H <U, F<T> >
{
};
现在我不能实例H<void, F<int> > h_of_f
,因为编译器选择原始模板H
,而不是专业化。
我用g ++ 4.1和g ++ 4.4观察到了相同的行为。
G
和H
之间的区别是什么,阻止编译器按我期望的方式工作?
太棒了,谢谢。 – 2011-01-06 19:11:17