我有一个班级T
和一些模板类D1, D2,...
,我将其混合并用作D1<D2<...<Dn<T>>...>
。我想构建一个模板类,它将参数作为一个混合类,并根据它所扣除的参数做一些事情。简单地假设只有一个模板类D。
template <class T, template <class> class D>
struct mix {
using type = D<T>;
};
template <class X>
struct DoStuff;
// 1st version -- this does not compile...
template <class T, template <class> class D>
struct DoStuff< typename mix<T,D>::type > {
using type = int;
};
// 2nd version -- this compiles
template <class T, template <class> class D>
struct DoStuff< D<T> > {
using type = int;
};
int main() {
return 0;
}
专业化的第一个版本导致以下编译错误(关于CygWin的GCC 4.8.3):
test.cpp:11:8: error: template parameters not used in partial specialization:
struct DoStuff< typename mix<T,D>::type > {
^
test.cpp:11:8: error: 'T'
test.cpp:11:8: error: 'template<class> class D'
而第二个编译干净。我很困惑,因为第一版中使用的mix<T,D>::type
正好是D<T>
,在第二版中使用。
这是编译器错误还是我错过了什么?非常感谢提前!