我想專門類模板具有以下功能:模板專業化與模板化類型
template <typename T>
class Foo
{
public:
static int bar();
};
功能沒有參數,並應返回基於美孚類型的結果。 (在這個玩具例子中,我們返回類型的字節數,但在實際應用中,我們想返回一些元數據對象。) 專業化工程完全指定類型:
// specialization 1: works
template <>
int Foo<int>::bar() { return 4; }
// specialization 2: works
template <>
int Foo<double>::bar() { return 8; }
// specialization 3: works
typedef pair<int, int> IntPair;
template <>
int Foo<IntPair>::bar() { return 2 * Foo<int>::bar(); }
然而,我想把它推廣到依賴(其他)模板參數本身的類型。 添加以下專業化給出了一個編譯時錯誤(VS2005):
// specialization 4: ERROR!
template <>
template <typename U, typename V>
int Foo<std::pair<U, V> >::bar() { return Foo<U>::bar() + Foo<V>::bar(); }
我假定這是不合法的C++,但是爲什麼呢?有沒有一種方法來優雅地實現這種模式?
但是請注意,你不需要任何特殊化返回T的大小:'static int Foo(){return sizeof(T); }'。我想知道這種模式可能無助於你的真正問題。 – UncleBens 2009-11-25 15:28:06