출력 스트림 연산자 <<
을 템플릿 클래스 정의 외부로 오버로드하려고합니다.템플릿 외부의 템플릿 클래스 오버로드 출력 스트림 연산자
템플릿 클래스의 내부를 구현하는 것은 괜찮습니다 :
template
<typename T,int _MaxSize=10,template <class C> class Policy=NoCheck,typename Container=std::vector<T>>
class MyContainer : public Policy<T>
{
public:
MyContainer():p(_MaxSize){};
friend std::ostream& operator<<(std::ostream& out,MyContainer<T,_MaxSize,Policy,Container> obj);
private:
Container p;
};
template
<typename T,int _MaxSize,template <class C> class Policy,typename Container>
std::ostream& operator<<(std::ostream& out,MyContainer<T,_MaxSize,Policy,Container> obj)
{
};
컴파일러가 불평 :
warning: friend declaration ‘std::ostream& operator<<(std::ostream&, MyContainer<T, _MaxSize, Policy, Container>)’ declares a non-template function [-Wnon-template-friend]
tempstruct.cc:39:97: note: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here)
template
<typename T,int _MaxSize=10,template <class C> class Policy=NoCheck,typename Container=std::vector<T>>
class MyContainer : public Policy<T>
{
public:
MyContainer():p(_MaxSize){};
std::ostream& operator<<(MyContainer<T,_MaxSize,Policy,Container>& obj){ };
private:
Container p;
};
하지만 템플릿 클래스 외부에서 작업을 수행하려고 할 때 누구나 어떻게 출력 스트림을 오페라로 할 수 있는지에 대한 간단한 예제를 줄 수 있습니까? 템플릿 클래스 외부에서 <<
을 정의 했습니까?
관련 게시물에 내가 여기있는 모든 사람들이 템플릿 클래스 내에서 그것을 발견했다.
잠시 생각해보십시오. "정말로 친구 일 필요가 있습니까?" – BoBTFish
@BoBTFish 답변에 대한 확신이 없습니다. 필자는 템플릿이 아닌 클래스에서 친구로 선언했습니다. –
'private' 멤버 데이터 나 함수를 사용합니까? 해야합니까? – BoBTFish