두 파일 (A.cpp, Ah, B.cpp, Bh)의 동일한 클래스의 두 버전이 같은 이름을 갖지만 내부 구현이 다른 모든 파일에 있습니다 .다른 파일에 같은 이름의 다른 클래스 버전
제 아이디어는 #include에서 .h 파일의 이름을 변경하여 한 버전에서 다른 버전으로 전환하는 것입니다. 따라서 코드의 다른 내용을 변경하지 않아야합니다 (두 버전의 메소드가 동일한 서명을 가짐). 동일한 속성)
Ah와 Bh는 절대로 동시에 포함되지 않습니다.
문제는 파일을 포함하는 항목이 무엇이든 관계없이 항상 버전이 실행된다는 것입니다. 적어도 B.h를 포함 시켰을 때 (컴파일 타임에 표시되는 일부 코드 오류를 넣어서) 컴파일되었음을 알 수 있습니다.
이 작업을 수행 할 수 있습니까? 또는이 C++ 일부 규칙을 위반합니다? 나는 이것이 A.h와 B.h를 동시에 사용하지 않기 때문에 One Definition Rule을 위반해서는 안된다고 생각합니다.
질문은 어떻게 객체 파일을 연결합니까? 포함을 조정하는 것만으로는 효과가 없습니다. – pmr
B.h를 포함하고 B.o와 연결하면 문제가 없습니다. 너 어떻게 연결되어있어? 그러나 클래스의 API가 일관성이 있다면 A.h와 B.h는 동일해야합니다. 왜 다른가? –
포함하는 헤더 파일은 연결하려는 실제 코드만큼 중요하지 않습니다. – Joe