크로스 플랫폼 프로젝트에서 작업 할 때 대부분 코드에서 #ifdef 블록이 많이 발생합니다. 이것은 실제로 매우 성가신 일이며 코드를 읽기 어렵게 만듭니다.Visual Studio : ifdef 블록 숨기기
비 관련 ifdef 블록을 숨기는 방법이 있는지 궁금합니다.
do A
크로스 플랫폼 프로젝트에서 작업 할 때 대부분 코드에서 #ifdef 블록이 많이 발생합니다. 이것은 실제로 매우 성가신 일이며 코드를 읽기 어렵게 만듭니다.Visual Studio : ifdef 블록 숨기기
비 관련 ifdef 블록을 숨기는 방법이 있는지 궁금합니다.
do A
내 대답은 정확히 당신이 찾고있는 것이 아니지만, 내가 아는 한 최선의 것입니다.
Visual Studio 2005에서는 개요 도구를 사용하여 #ifdef 블록의 사용하지 않는 부분을 축소 할 수 있습니다.
OS 고유 코드를 자체 파일로 분리하고 #ifdef 블록과 중요한 부분 (즉 완전한 선언)을 포함하는 마스터 파일을 사용하여 플랫폼간에 변경하지 않는 것이 좋습니다.
또 다른 조건은 가능한 경우 조건부 블록 코드를 단순히 그룹화하는 것입니다. 코드 순서가 그다지 중요하지 않은 경우가 많으며 코드를 그룹화 할 수 있습니다.
파일을 참조 자료로 사용하려는 경우 수행 할 수있는 다른 작업은 조건부 블록 만 처리하고 조건부 블록을 처리하는 데 필요하지 않은 모든 사항은 무시하는 전 처리기를 통해 파일을 실행하는 것입니다.
#ifdef _PC_
do a
#else
do b
#endif
_PC_
경우가 정의 도구/플러그인 만이 표시되어야합니다 : 난 당신이 코드가있는 경우, 예를 들어, 비주얼 스튜디오 2005
을 사용하고 있습니다
그냥 다음 처리기 지시문 사용 : 내가 볼 (및 사용) 한
#region IfDef
#ifdef PC
doSomethingCalledA();
#else
doSomethingCalledB();
#endif
#endregion
가장 깨끗한 방법 Strategy Pattern을 사용하면 플랫폼 별 코드를 별도의 전략 클래스로 추상화 할 수 있습니다.
예 :
class MyAbstractClass
{
static MyAbstractClass Create()
{
#ifdef win32
return new WindowsClass(); // this could be a shared_ptr
#else
return new PosixClass();
#endif
}
virtual method MyMethod() = 0;
}
// windows_class.cpp
class WindowsClass : public MyAbstractClass
{
virtual method MyMethod()
{
// platform specific code here
}
}
// posix_class.cpp
class PosixClass : public MyAbstractClass
{
virtual method MyMethod()
{
// platform specific code here
}
}
각각에 정의 된 해당 매크로를 사용하여 작업중인 각 플랫폼에 대한 솔루션을 설정하십시오. 모든 솔루션에 소스 파일을 포함하십시오. 그런 다음 현재 솔루션의 플랫폼과 일치하지 않는 코드 섹션을 찾아 축소합니다.
Visual Studio에서는 솔루션별로 축소 된 섹션 설정을 저장하므로 열려있는 프로젝트에 따라 다른 확장 코드가 표시됩니다. 나는 이것이 * .suo 파일에 저장되어 있다고 생각한다.
나는 당신이 요구 한 것에 대하여 제안 할 것입니다. 코드가 멀티 플랫폼이라는 사실을 숨기면 쉽게 접할 수있는 코드를 인식하지 못하고 다른 플랫폼으로 변경해야합니다.
예를 들어, do a 줄 바로 다음에 줄을 추가하면 어떻게됩니까? 블록 내부 또는 외부에 있는지 어떻게 알 수 있습니까? 추가 한 새 줄은 다른 구역에 적절한 대체 줄이 필요할 수도 있습니다. 또는 블록 밖으로 나가면 다른 버전을 알지 못해도 깨질 수 있습니다.
불편한 것처럼 보일지 모르지만 그게 언어입니다.언어 디스플레이에 익숙해 지려면 디자인 방식에 익숙해 져야하며, 다른 사람들이 선호하는 방식으로 해킹하려고 시도하는 것보다 다른 방식으로 사용하는 것이 가장 좋습니다.
문제는 모든 파일에 대해 수행해야한다는 것입니다. – tep
오, 음, 다음 프로젝트에 대한 생각을 유지하십시오 ;-) – Kredns