2013-01-23 2 views
2

나는 다른 곳에서는 사용되지 않는 몇 가지 보조 함수를 정의하기 위해 클래스와 주어진 꽤 복잡한 방법을 가지고있다. 지금은 내가개체 외부의 보조 기능을 사용할 수 있습니까?

  • 내 클래스에 추가할지 여부를 궁금하네요 -
  • 단지 내 구현 파일에, 즉 개별적으로 외부를 지키는 OOP 패러다임에 따라 수행해야 할 것 같다 - 그 종류의 준 중복 메소드로 클래스 정의를 채우면 클래스 정의를 읽기 쉽게 만들 것이기 ​​때문입니다.

제 질문은 C++ 스타일과 관련하여 어떻게해야합니까? C++은 객체 지향 언어가 아니라 하이브리드 언어이기는하지만 두 번째 솔루션은 OOP 원칙에 어긋납니다. 클래스 메서드로 구현 된 경우 언급 한 함수는 정적입니다.

+2

OOP 패러다임은 무의미하지 않습니다. 귀하의 첫 번째 옵션은 어리석은 광신자들이 당신에게해야한다고 말할 수도 있지만, 나는 무의미한 생각을하지 않는 것이 좋습니다. –

+1

이 기사보기 : http://www.drdobbs.com/cpp/how-non-member-functions-improve-encapsu/184401197 –

답변

7

소스 파일 내 Unnamed namespace에 넣으십시오.
이름없는 네임 스페이스를 사용하면 번역 단위 내에서 함수를 볼 수 있지만 번역 단위 외부에서는 볼 수 없습니다. 귀하의 기능에는 여전히 외부 연결이 있지만 번역 단위 외부의 누구에게도 보이지 않습니다.

2

FWIW, 난이 추가거야 : 지금까지 주어진 대답은 잘하지만, C++ (11) 이후 엄격 보조 기능에 대한 더 적은 방해 해결책이 발견 :

것은 그들을 정의 그들이 제공하는 방법 안에 람다처럼.

이렇게하면 friend 선언을 사용하거나 개인 정적 멤버로 지정하지 않고도 다른 곳에서는 보이지 않게하고 적절한 액세스 권한을 부여 할 수 있습니다.

관련 문제