3

我基本上是在尝试做模板类中单个方法的模板特化中讨论的内容,除了我的 TClass 有多个模板参数,如下所示:

template < class KEY, class TYPE >
class TClass
{
public:
    :
    void doSomething(KEY * v);
    :
};

template < class KEY, class TYPE >
void TClass<KEY, TYPE>::doSomething(KEY * v) 
{
    // do something
}

到目前为止这工作,但我如何为一个模板参数定义一个专门的实现?我试着添加这个:

template < class TYPE >
void TClass<int, TYPE>::doSomething(int * v)
{
    // do something if KEY is int
}

但是编译器抱怨该方法/函数的“无法将函数定义与现有声明匹配”(VC2010)。

作为旁注:如果我同时专门化两个模板参数,它可以工作:

template < >
void TClass<int, char>::doSomething(int * v)
{
    // do something if KEY is int and TYPE is char
}

但这不是我想做的。

有什么建议么?

4

2 回答 2

6

在通过部分特化定义方法之前,您必须特化整个类:

template <typename T, typename U>
class TClass;

template <typename T>
class TClass<int, T>
{
    void doSomething(int* v);
};

template <typename T>
void TClass<int, T>::doSomething(int* v)
{
    // ...
}

现场演示

于 2013-05-27T19:24:07.973 回答
1

您可以完全专门化类方法,但据我记得您不能部分专门化它。

您可以尝试对整个班级进行部分专业化,但这可能会涉及很多重复。

于 2013-05-27T19:23:52.280 回答