在模板中使用operator <

时间:2019-05-31 09:36:22

标签: c++ qt

我有一个带有参数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];
}

1 个答案:

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