필자는 몇 가지 노트를 쓰고 있는데 컴파일을 위해서 으로 ostream
에 대해 operator<<
오버로드 된 함수를 추가했습니다. 그것은 잘 컴파일하지만 <>
이 template
인 내에서 class type
으로 연산자를 오버로드하고 오버로드 된 함수의 두 번째 입력으로 해당 유형을 전달 했으므로 앞으로 정의 할 모든 클래스에 new 연산자를 사용하지 않겠습니까? 여기 내 참조 용 코드가 있습니다. 메모 용도로만 사용되며 기능이 없습니다. 이 SFINAE에 관해서연산자를 템플릿으로 오버로드하면 어떻게됩니까?
template <class type>
ostream& operator<< (ostream& s, type x){
s << x.getsmth();
//...
}
* "그것이 내가 지금부터 정의하는 모든 클래스에 대한 새로운 연산자를 사용하지 않습니다? "* 네, 근본적으로 그렇습니다. 그래서 템플릿 기반의 과부하를 추가하는 것이 현명하지 못한 이유입니다. –
물론 거기에서 호출 된 메소드를 찾지 못하면 컴파일러는 미친 듯이 불평 할 것입니다. 그것이 내가 생각했던 거죠. –
EVERY 클래스가 아닌 다른 클래스가 더 적합합니다 (예 : 클래스에만 해당). 정의한 템플릿과 동일한 네임 스페이스에 있습니다 ([ADL] (http : // en .cppreference.com/w/cpp/language/adl) 규칙). –