2013-01-08 4 views
-1

콘솔을 열지 않고도 새 창에 메시지를 표시하는 Assert 기능을 생성하려고합니다. 이 함수는 독립적이어야하며 가능한 경우 C++ 외부 라이브러리를 사용하지 않아야합니다. GUI 작업을 포함하지 않는 출력에MessageBox OS입니다. Independent

#include <string> 
#include <sstream> 
#ifdef WIN32 
#include <windows.h> // include windows header, for Windows Based Sistems. 
#else 
// ... 
#endif 

void Assert (bool cond,const char* file,int line,const char* desc) 
{ 
     if (cond) return; // No Assertion. 
#ifdef WIN32 
     // Use MessageBox function to display the information. 
     // For Example ... 
     std::stringstream st; 
     st << "There Was An Error At Runtime ! \n"; 
     st << "File: " << file << "\n"; 
     st << "Line: " << line << "\n"; 
     st << "Description: " << desc << "\n"; 
     st << "Do You Want To Continue Running the Application?\n"; 
     if (MessageBox (NULL,"Unexpected Error", str.str().c_str(), MB_YESNO) == IDNO) 
      exit (-1); 
#else 
     // Do Something, but in Unix Base Systems. 
#endif 
} 
#define assert(condition,description) \ 
      __assert__ (condition,__FILE__,__LINE__,description) 

필요 C++ 코드 다른 O.S

+0

다른 OS를 정의하십시오 - 너무 많습니다 – Zaffy

+0

리눅스, 매킨토시 –

+0

#ifdef WIN32의 #else 뒤에 실제로 코드를 작성하지 않으시겠습니까? 나머지는 훨씬 간단 해지기 때문에 추측 할 필요가 없습니다. –

답변

1

C++ 표준에서 메시지 박스. 은 원하는 플랫폼에 대해 GUI 서비스를 제공하는 외부 라이브러리를 사용해야합니다.

그래서 당신이 요구하는 것은 불가능합니다. 죄송합니다.

+0

어떤 라이브러리를 사용해야합니까? GTK, wkWidgets? 그냥 MessageBox를 인쇄하기위한 가장 간단한 라이브러리? –

+0

@VictorRuiz 대화 상자가 문제가되지 않습니다. 문제는 차단 동작입니다. – Zaffy

+0

@VictorRuiz 메시지 상자 만 필요하므로 각 시스템의 기본값이 무엇이든 사용하십시오. 하나의 메시지 상자를 가져 오는 것은 너무 어렵지 않아야합니다. Mac OS X에서는 C++이 아닌 Objective C로 GUI 코드를 작성해야합니다. 그러나 유스 케이스가 이상하게 보입니다. 응용 프로그램이 GUI가 아닌 경우 왜 메시지 상자를 열려고합니까? 의미가 없습니다. –