以下是简化问题。
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&);
for 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
我该如何解决这个问题?
答案 0 :(得分:2)
看看this article。您可能最好只为您想要“专门化”的特定类型编写name
函数:
std::string name(const Outer::Inner&);