Я хочу добавить несколько объявлений друзей в класс. Например, я хочу добавить некоторые функции 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>
хорошей идеей?