2

私の質問は次のスレッドです:親を特殊化せずにメンバーテンプレートを特殊化する

私はそうすることは違法であると言っている基準で絶対に大丈夫です。しかし、なぜそうすることが違法なのかを理解したいのですが?それが許可された場合、どのような影響がありますか?

4

1 に答える 1

2

たぶんこのようなもののために:

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;

賢明な解決策は、「すべてを明確にする」と言うことです。

于 2010-09-17T07:21:35.300 に答える