은 다음 코드 조각을 고려C++ 템플릿 대 집계
class B {
private:
// some data members
public:
friend bool operator==(const B&,const B&);
friend ostream& operator<<(ostream&,const B&);
// some other methods
};
template <typename T=B>
class A {
private:
// some data members
vector<vector<T> > vvlist;
public:
// some other methods
};
내 요구 사항 유형 매개 변수로 전달되는 타입 T는 연산자 ==와 운영자 < < 방법에 대한 정의를 제공해야한다는 것입니다. T에 대한 다른 제한 사항을 적용하고 싶지 않습니다.
어떻게하면됩니까?
내가 생각할 수있는 한 가지 방법은이 두 가지 방법을 선언하는 "Z"라고하는 추상 클래스를 만드는 것입니다. 다음
및
vector<vector<Z> > vvlist;
를 작성하고 템플릿으로 클래스 A가 없습니다.
더 좋은 방법이 있나요?
A가 어디에서나이 연산자를 사용하면 코드에 T가 없으면 코드가 컴파일되지 않습니다. 그보다 더 잘하고 싶니? 게다가, T는 또한 std :: vector의 요구 사항을 충족시켜야합니다. 복사가 가능해야합니다. – UncleBens
오! 승인. 그렇다면 아마도이 예제는 문제가되지 않습니다. 하지만 방금 일부 기능 대신 예제로 제공했습니다. – user855