함께 그룹화 할 수 있지만 일부 개체/엔티티에 속하지 않으므로 메서드로 처리 할 수없는 몇 가지 기능이 있습니다.C++ 네임 스페이스 및 템플릿
기본적으로이 상황에서는 새로운 네임 스페이스를 만들고 파일에 정의를 넣습니다. 구현은 cpp
파일입니다. 또한 (필요한 경우) 그 cpp
파일에 익명의 네임 스페이스를 만들고 거기에 내 네임 스페이스의 인터페이스에 노출 시키거나 포함 할 필요가없는 모든 추가 기능을 넣을 것입니다.
샘플 코드 (header
) (... 난 그냥 더 나은 샘플 생각할 수 없다 아마 최고의 예를 더 나은 다른 프로그램 아키텍처 할 수 있지만) 아래의 코드를 참조하십시오
namespace algorithm {
void HandleCollision(Object* object1, Object* object2);
}
샘플 코드 (cpp
)
#include "header"
// Anonymous namespace that wraps
// routines that are used inside 'algorithm' methods
// but don't have to be exposed
namespace {
void RefractObject(Object* object1) {
// Do something with that object
// (...)
}
}
namespace algorithm {
void HandleCollision(Object* object1, Object* object2) {
if (...) RefractObject(object1);
}
}
지금까지 그렇게 좋았습니다.이 코드는 내 코드를 관리하는 좋은 방법이라고 생각합니다.하지만 템플릿 기반 함수가 있고 기본적으로 동일한 작업을 수행하려는 경우 어떻게해야합니까?
템플릿을 사용하는 경우 모든 코드를 header
파일에 넣어야합니다. 그렇다면 구현 세부 사항을 어떻게 숨길 수 있습니까?
나는 내 인터페이스에서 RefractObject
기능을 숨기려하지만 단순히
(나는 header
파일에있는 모든 내 코드를해서) 내가 생각 해낸 유일한 접근 방식을 선언을 제거 할 수 없습니다 같은되었습니다
샘플 코드 (header
)
namespace algorithm {
// Is still exposed as a part of interface!
namespace impl {
template <typename T>
void RefractObject(T* object1) {
// Do something with that object
// (...)
}
}
template <typename T, typename Y>
void HandleCollision(T* object1, Y* object2) {
impl::RefractObject(object1);
// Another stuff
}
}
모든 아이디어를 어떻게 코드 설계의 관점에서이 더 나은 만드는 방법?
구성원 중에서 무엇보다 자유 함수가 선호됩니다 :) – GManNickG
글쎄, 여기에는 샘플 용이라고 나와 있습니다. 내 실제 프로젝트의 경우 알고리즘은 근사 알고리즘과 경로 찾기 알고리즘을 포함하고 있기 때문에 Intellisense가 발명 된 이래로 그 단어의 의미에서 '멤버'로만 만들 수는 없습니다 ... –
멤버 함수> 무료 함수. – Puppy