2
我的問題是w.r.t以下螺紋的顯式實例之前,需要外部類模板的顯式實例:specialize a member template without specializing its parent爲什麼類模板
我對這個標準說,這是非法的這樣做精絕。但我想了解爲什麼這樣做是非法的?如果允許,會有什麼影響?
我的問題是w.r.t以下螺紋的顯式實例之前,需要外部類模板的顯式實例:specialize a member template without specializing its parent爲什麼類模板
我對這個標準說,這是非法的這樣做精絕。但我想了解爲什麼這樣做是非法的?如果允許,會有什麼影響?
的也許是因爲這樣的事情:
template <typename T>
struct foo
{
template <typename U>
struct bar
{
typedef U type;
};
};
template <typename T>
struct foo<T>::bar<int> // imaginary
{
typedef void type;
};
template <>
struct foo<float>
{
template <typename U>
struct bar
{
typedef U* type;
};
};
// is it void [foo<T>::bar<int>] or
// int* [foo<float>::bar<U>]?
typedef foo<float>::bar<int>::type ambiguous;
一個明智的解決辦法是說:「我們會讓整個事情明確的」。
+1。甚至可能是'foo'根本沒有內部類型的'bar'。 –
2010-09-17 08:01:40
這個答案引發了一個問題,但爲什麼部分專門化'bar' *是被允許的:'template template struct foo :: bar {typedef void type; };對於需要*兩個*參數的'bar'來說都沒問題。現在,如果你做'foo :: bar :: type',你會得到相同的「歧義」:) –
2010-09-17 09:51:17
@Johannes:哼,那我就給你吧。 :) 這就是我得到的。 – GManNickG 2010-09-17 14:38:44