我有一些模板类的成员函数,它们本身就是模板。对于所有这些,编译器抱怨:error: function template partial specialization is not allowed
。
但我不明白为什么这应该是部分专业化。我可以做些什么来实现我在下面的代码中所写的内容?
template <int DIM>
class A : public B
{
public:
template <class T>
T getValue(void* ptr, int posIdx);
template <class T>
T getValue(void* ptr, int posIdx, int valIdx);
template <class T>
T getValue(void* ptr, Coords& coord, Coords& size, int valIdx);
template <class T>
void setValue(void* ptr, int posIdx, T val);
template <class T>
void setValue(void* ptr, int posIdx, int valIdx, T val);
template <class T>
void setValue(void* ptr, Coords& coord, Coords& size, int valIdx, T val);
};
// example how the functions are implemented:
template <int DIM>
template <class T>
T A<DIM>::getValue<T>(void* ptr, Coords& coord, Coords& size, int valIdx){
T val = static_cast<T>(some_value); // actually, its more complicated
return val;
}
答案 0 :(得分:1)
您的问题是,正如您的编译器所说,您正在尝试部分专门化功能模板:
template <int DIM>
template <class T>
T A<DIM>::getValue<T>(void* ptr, Coords& coord, Coords& size, int valIdx){
// here^^^
T val = static_cast<T>(some_value); // actually, its more complicated
return val;
}
您无需在此处专门化该功能,只需正常定义:
template <int DIM>
template <class T>
T A<DIM>::getValue(void* ptr, Coords& coord, Coords& size, int valIdx){
// no more <T>^
T val = static_cast<T>(some_value); // actually, its more complicated
return val;
}