헤더 파일의 네임 스페이스 내에 클래스가 있습니다. 클래스에는 템플릿 유형이 필요하며 특정 유형 만 사용하면됩니다. 아래는 예를 보여줍니다.네임 스페이스 내의 전용 클래스
파일 a.hpp
// a.hpp
namespace a_ns {
template<class T>
class a {
// stuff
};
typedef a<double> a_double;
} // end of namespace
// stuff
파일 b.hpp
// main.cpp
#include "b.hpp"
int main() {
b_ns::b my_b; // <<<--- I LIKE this!
a_ns::a<float> my_a_which_is_not_allowed; // <<<--- I DO NOT LIKE THIS THOUGH! D:
}
그래서 당신은 오히려에서 볼 수있는 파일 MAIN.CPP 예를 갈망
// b.hpp
#include <a.hpp>
namespace b_ns {
typedef a_ns::a_double b;
}
의 최종 목적은 일반 사용자가 class a
을 float
으로 선언하도록 허용하지 않는 것입니다. d는 typedef a<double> a_double;
으로 선언 된 특정 유형의 사전 정의 된 클래스 만 사용할 수 있습니다.
이 포함되어 있기 때문에 위의 예와 같이 a<float>
을 만들 수 있기 때문에 위의 예가 이것을 허용한다고 생각했지만 잘못되었습니다. a.hpp
! 그래서 당신은 그 문제를 봅니다! (잘하면?)
이 모든 것이 가능하다면 아마도 간단한 해결책이있을 것입니다. 여기
사실 나는 이것을 좋아한다. 프로그래머를 만드는 데 어려움을 겪을 수있는 방법이 없다는 것을 두려워한다. –
@ DieterLücking, 고의적으로 구멍 속으로 자신을 파해야한다는 사실을 알게되면, 그것을 예방하는 것에 대해 훨씬 덜 걱정하게됩니다. 그들이 스스로 망쳐 놓고 싶다면 그들을 내버려 둬라. 거기에 뭔가 도움이 될만한 것이 있다면 적어도 지금은 해킹이 필요하지 않습니다. – chris
또는 Herb Sutter가 다음과 같이 말합니다. Machiavelli가 아니라 Murphy를 방어하십시오. – TemplateRex