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

我不能在我考虑的三个地方声明明确的专业化:

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 回答