我有一个带有参数T的类模板,它是一个自定义容器。 T将可以是指针或引用。 在此模板中,我具有一个将对象放入容器的功能。我想将新元素与operator <排在一起,但问题是我不知道T是指针还是引用。如果T是一个指针,我必须取消引用它,否则不是。
我找到了std :: is_pointer :: value,但是当我尝试创建一个带有int T型的容器时,出现了编译时错误。
void insert(int row, T t){
int i = 0;
for (; i < size && *t < *matrix[i]; i++) { //or t < matrix[i] if T is a reference
new_matrix[i] = matrix[i];
}
答案 0 :(得分:2)
您可以创建其他方法来统一实现insert
,例如:
template <typename T> T& deref_ptr(T* p) { return *p; }
template <typename T> T& deref_ptr(T& p) { return p; }
,然后将*t
(指针版本)替换为(通用)deref_ptr(t)
(*matrix[i]
替换为deref_ptr(matrix[i])
):
void insert(int row, T t){
for (int i = 0; i < size && deref_ptr(t) < deref_ptr(matrix[i]); i++) {
new_matrix[i] = matrix[i];
}
}