использовать оператор <в шаблон - PullRequest
0 голосов
/ 31 мая 2019

У меня есть шаблон класса с параметром T, это пользовательский контейнер. T может быть указателем или ссылкой. В этом шаблоне у меня есть функция, с помощью которой я помещаю свои объекты в контейнер. Я хочу разместить новые элементы в порядке с оператором <, но проблема в том, что я не знаю, является ли T указателем или ссылкой. если T - указатель, я должен разыменовать его, иначе нет. </p>

Я нахожу 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 Ответ

2 голосов
/ 31 мая 2019

Вы можете создать дополнительные методы для объединения реализации 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) (и * 1007).* по 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];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...