2013-10-31 64 views
0

我正在研究一個簡單的類,這樣如果我使用cout「equivalent」,它將顯示控制檯,如果我不這樣做,控制檯不會彈出。Win32 C++ Return cout功能

如果可能,最終結果是嘗試使用它,例如:O.C() << "any type of data";O.C("any type of data");相當於std::cout流。這次旅行是爲了讓我知道它是否被使用過。

// the obvious, shows and opens a/the console window so I can use the cout and cin streams. 
void ShowConsole() { 
    AllocConsole(); 
    HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); 
    int hCrt = _open_osfhandle((long) handle_out, _O_TEXT); 
    FILE* hf_out = _fdopen(hCrt, "w"); 
    setvbuf(hf_out, NULL, _IONBF, 1); 
    *stdout = *hf_out; 

    HANDLE handle_in = GetStdHandle(STD_INPUT_HANDLE); 
    hCrt = _open_osfhandle((long) handle_in, _O_TEXT); 
    FILE* hf_in = _fdopen(hCrt, "r"); 
    setvbuf(hf_in, NULL, _IONBF, 128); 
    *stdin = *hf_in; 
} 

從那裏,我不知道該怎麼做。爲了簡單起見,我寫作的課程全球定義爲「O」。函數C()是我正在嘗試使用的流。

我不知道這裏要做什麼,要麼找到一種方法來返回與C() cout的句柄,要麼找到一種方法讓C()接受任何類型的數據。

類是基本的,只是看起來像:

class testout { 
private: 
    bool display; 
public: 
    void ShowConsole(); 
    void C(); // which could return a handle, or accept any data type 
} 

任何幫助表示讚賞,我也可能用在點一些不正確的術語。

+0

[可變模板](http://en.wikipedia.org/wiki/Variadic_template)。 –

+0

@CaptainObvlious:這與訪問控制檯有什麼關係? –

+0

我很困惑。我認爲大多數控制檯應用程序都在控制檯內部運行,而不是選擇創建/銷燬他們生活的唯一東西。非控制檯應用程序通常會生成控制檯應用程序以顯示控制檯窗口。 (或者讓GUI看起來像一個東西)我留下的是爲什麼徹底打開'stdout'然後用檢索的內容替換當前的'stdout'是有意義的? – 2013-10-31 20:46:24

回答

0

我覺得我不妨手動輸入類型。

void testout::TOUT(int i) {cout << i;} 
void testout::TOUT(double d) {cout << d;} 
void testout::TOUT(char c) {cout << c;} 
void testout::TOUT(char* cstr) {cout << cstr; } 
void testout::TOUT(string str) {cout << str; } 

在類中,對於這些函數,我會額外追加更新顯示爲true。