我正在尝试将专业分组在一起以避免多次编写它们。例如,在下面的代码中,我尝试将“float”和“double”特化为 foo::func(); 的一种实现情况。然后我对“bool”使用另一种实现。
template<typename T> struct foo;
template<typename T> struct bar;
template<> struct bar<float> { typedef float Type; };
template<> struct bar<double> { typedef double Type; };
/* specialize for float and double here */
template<typename T> struct foo<typename bar<T>::Type> {
static void func() { ... }
};
template<> struct foo<bool> {
static void func() { ... }
};
这在 GCC 4.4.3 中出错。(这是一个目标编译器,因为它是 Ubuntu Server 10.04 LTS 的库存,据称还有三年的寿命。)错误是:
foo.cpp:8: error: template parameters not used in partial specialization:
foo.cpp:8: error: ‘T’
该错误指的是 foo 的第一个特化(对于“float”和“double”)。
我看不出我在这里违反了 C++ 的哪一部分——如果有人知道这一章和经文,我将不胜感激。此外,如果有人知道实现相同目标的另一种方法(重新使用特定类型组的特化,而没有不必要的冗长代码),我也将不胜感激任何建议!