Предварительное объявление шаблона C ++ - PullRequest
0 голосов
/ 01 мая 2018

Я хочу добавить несколько объявлений друзей в класс. Например, я хочу добавить некоторые функции operator==, operator <. Так что я должен использовать предварительные объявления:

template <typename >
class MyBlob;

template <typename T>
bool operator==(const MyBlob<T> &, const MyBlob<T>&);

template <typename T>
bool operator!=(const MyBlob<T> &, const MyBlob<T>&);


template <typename T>
bool operator<(const MyBlob<T> &, const MyBlob<T>&);


template <typename T>
class MyBlob
{

    friend bool operator== <T>(const MyBlob<T> &lhs,const MyBlob<T> &rhs);
    friend bool operator!= <T>(const MyBlob<T> &lhs,const MyBlob<T> &rhs);
    friend bool operator< <T>(const MyBlob<T> &lhs,const MyBlob<T> &rhs);
      //other things

};

Это раздражает, что я должен использовать template <typename T> три раза. И это действительно снижает читабельность.

Итак, есть ли способ сделать предварительное объявление более простым? Или у меня есть какой-нибудь способ объявить эти вещи в одном месте, как обычная функция?
Если это не может быть сделано, является ли использование typedef для упрощения template <typename T> хорошей идеей?

1 Ответ

0 голосов
/ 01 мая 2018

Вы можете попытаться определить операторы друзей в объявлении класса:

template <typename T>
class MyBlob {

    friend bool operator== (const MyBlob& lhs, const MyBlob& rhs) {
        // ...
    }

    friend bool operator!= (const MyBlob& lhs, const MyBlob& rhs) {
        // ...
    }

    friend bool operator< (const MyBlob& lhs, const MyBlob& rhs) {
        // ...
    }

    // ...
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...