如何避免实例化错误后的专业化?
问题描述:
这是简化的问题。如何避免实例化错误后的专业化?
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
我怎样才能解决这个问题?
谢谢!现在我明白了,我很惊讶我的想法。只是超载会做,对吧?我也会看文章! – 2012-07-17 05:31:37
还有一件事。我在哪里宣布重载?看来问题依然存在。由于与模板案例相同的原因,没有地方。 – 2012-07-17 06:05:42
您可以在任何需要的地方声明它,并将其定义在.cpp中,就像任何其他函数一样。如果在许多地方需要它,你可以为它提供专用的.h和.cpp文件(你也可以使用'inline'将定义放在.h中) – juanchopanza 2012-07-17 07:17:54