C++ - templated class 的模板专业化
C++ - Template specialization by templated class
我有一个模板化的 class,我需要在其中为同样模板化的 class 专门化一些方法。更具体地说:我尝试结合智能数组和共享指针:
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 {
^
这种事情还能做吗?
您可以部分特化整个 class 模板:
template <typename T>
struct sortedArray<smartPtr<T>> {
void insert(const smartPtr<T>& object) {
....
}
// everything else
};
或者您可以显式专门化一个方法:
An explicit specialization may be declared for a function template, a class template, a member of a class template or a member template.
如:
template <>
void sortedArray<smartPtr<int>>::insert(const smartPtr<int>& object) {
...
}
但是您不能部分只专门化一个方法。
我有一个模板化的 class,我需要在其中为同样模板化的 class 专门化一些方法。更具体地说:我尝试结合智能数组和共享指针:
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 {
^
这种事情还能做吗?
您可以部分特化整个 class 模板:
template <typename T>
struct sortedArray<smartPtr<T>> {
void insert(const smartPtr<T>& object) {
....
}
// everything else
};
或者您可以显式专门化一个方法:
An explicit specialization may be declared for a function template, a class template, a member of a class template or a member template.
如:
template <>
void sortedArray<smartPtr<int>>::insert(const smartPtr<int>& object) {
...
}
但是您不能部分只专门化一个方法。