У меня есть код со следующей базовой структурой:Определить друга метод шаблона вне пространства имен
namespace A{
template<class T,unsigned DIM>
class CMyTable{
...
public:
template<class T,unsigned DIM>
friend std::ostream& operator<<(std::ostream& s, const CMyTable<T,DIM>& vec);
}
};
}
Исходная задача была, чтобы получить мой оператор < < вне пространства имен А.
Я попытался это решение: How do I define friends in global namespace within another C++ namespace?
namespace A{
template<class T,unsigned DIM>
class CMyTable;
}
template<class T,unsigned DIM>
std::ostream& operator<<(std::ostream& s, const CMyTable<T,DIM>& vec);
namespace A{
template<class T,unsigned DIM>
class CMyTable{
...
public:
template<class T,unsigned DIM>
friend std::ostream& ::operator<<(std::ostream& s, const CMyTable<T,DIM>& vec);
}
};
}
template<class T,unsigned DIM>
std::ostream& operator<<(std::ostream& s, const CMyTable<T,DIM>& vec){
// [...]
}
Я получил эту ошибку: ошибка C2063: «оператор < < ': не функция внутри объявления класса.
public:
template<class T,unsigned DIM>
friend std::ostream& ::operator<<(std::ostream& s, const CMyTable<T,DIM>&
У кого-нибудь есть идеи?
Спасибо.
Спасибо за ваш ответ. Но мне нужен мой метод, чтобы быть другом. Я просто не хочу определять аксессоров (даже const) в моем классе. – Haimo
@ Хаймо, тогда в чем проблема с определением встроенного (внутри класса)? – stardust
Я хочу получить доступ к оператору в глобальном пространстве имен. – Haimo