为什么这部分专业化? (我该怎么办?)

时间:2015-04-20 13:19:38

标签: c++ templates g++

我有一些模板类的成员函数,它们本身就是模板。对于所有这些,编译器抱怨: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;
}

1 个答案:

答案 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;
}