Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用多个模板参数对模板化类中的单个方法进行模板专门化_C++_Visual Studio 2010_Templates_Specialization - Fatal编程技术网

C++ 使用多个模板参数对模板化类中的单个方法进行模板专门化

C++ 使用多个模板参数对模板化类中的单个方法进行模板专门化,c++,visual-studio-2010,templates,specialization,C++,Visual Studio 2010,Templates,Specialization,我基本上是在尝试执行中讨论的内容,除了我的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) {

我基本上是在尝试执行中讨论的内容,除了我的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
}
模板
类TClass
{
公众:
:
无效剂量测定(图例*v);
:
};
模板<类键,类类型>
void TClass::doSomething(键*v)
{
//做点什么
}
到目前为止,这是可行的,但是如何为一个模板参数定义专门的实现呢?我尝试添加以下内容:

template < class TYPE >
void TClass<int, TYPE>::doSomething(int * v)
{
    // do something if KEY is int
}
模板
void TClass::doSomething(int*v)
{
//如果KEY为int,则执行某些操作
}
但编译器抱怨该方法/函数“无法将函数定义与现有声明相匹配”(VC2010)

作为旁注:如果我同时专门化两个模板参数,它会起作用:

template < >
void TClass<int, char>::doSomething(int * v)
{
    // do something if KEY is int and TYPE is char
}
模板<>
void TClass::doSomething(int*v)
{
//如果KEY为int,TYPE为char,请执行某些操作
}
但那不是我想做的


有什么建议吗?

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


您可以尝试对整个类进行部分专门化,但这可能会涉及大量重复。

在通过部分专门化定义方法之前,您必须对整个类进行专门化:

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)
{
    // ...
}
模板
类TClass;
模板
类TClass
{
无效剂量测定(int*v);
};
模板
void TClass::doSomething(int*v)
{
// ...
}

你的两个答案基本上是相同的。我标记了0x499602D2的答案,因为它更复杂。顺便说一句,来自VS2015的错误消息可能毫无帮助。C3860:模板参数顺序错误,C2995:已定义模板。