當比方說,我有專業化使用多個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