3

これが単純化された問題です。

template <class T>
std::string name(const T&);  // This is the template 
                             // I want to explicitly specialize.

class Outer
{
    class Inner
    {
    };

    class Container : public ::Container<Inner> // This causes also an implicit
                                                // specialization of f::name
    {
    };
};

どうすれば専門にできますか

template <class T>
std::string name(const T&);

のためにOuter::Inner

私が検討した3つの場所で明示的な特殊化を宣言することはできません。

template <class T>
std::string name(const T&); 

// 1. Here I cannot forward declare a nested class

class Outer
{
    class Inner
    {
    };

    // 2. Here I get error: explicit specialization
    //    in non-namespace scope 'class Outer'

    class Container : public ::Container<Inner>
    {
    };
};

// 3. Here I get error: specialization of '...' after instantiation

どうすればこの問題を解決できますか?

4

1 に答える 1

2

この記事をご覧ください。name「専門化」したい特定のタイプの関数を作成する方がよい場合があります。

std::string name(const Outer::Inner&);
于 2012-07-17T05:28:10.917 に答える