C++ - 按模板化类进行模板专用化

C++ - Template specialization by templated class

本文关键字:专用 C++      更新时间:2023-10-16

我有一个模板化类,我需要为同样模板化的类专门化一些方法。更具体地说:我尝试将智能数组和共享指针结合起来:

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 {
       ^

甚至有可能做这种事情吗?

您可以部分专用化整个类模板:

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) {
    ...
}

但是,您不能部分地专门化一种方法。