C ++ - 模板化类的模板专业化

时间:2015-04-15 18:26:46

标签: c++ templates template-specialization

我有一个模板化的类,我需要专门化几个类的方法,这些方法也是模板化的。更具体一点:我尝试将智能数组和共享指针结合起来:

template <class T>
int sortedArray< smartPtr<T> >::insert(const T& object) {
...
}

使用此语法,我会收到以下错误:

main.cpp:162:55: error: invalid use of incomplete type ‘class sortedArray<smartPtr<T> >’
int sortedArray< smartPtr<T> >::insert(const T& object) {
                                                      ^
main.cpp:87:7: error: declaration of ‘class sortedArray<smartPtr<T> >’
 class sortedArray {
       ^

甚至可以做这种事吗?

1 个答案:

答案 0 :(得分:2)

您可以部分专门化整个班级模板:

template <typename T>
struct sortedArray<smartPtr<T>> {
    void insert(const smartPtr<T>& object) {
        ....
    }

    // everything else
};

或者你可以明确地专门化一个方法:

  

可以为函数模板,类模板,类模板的成员或成员模板声明显式特化。

如:

template <>
void sortedArray<smartPtr<int>>::insert(const smartPtr<int>& object) {
    ...
}

但是你不能部分专门化一个方法。