2012-05-06 66 views
2

我正在我的GUI系統上工作,我需要幫助設計模式。允許多種類型轉換爲文本每個時間步

對於我的一個GUI元素,它可以包含需要每次更新的文本。但是,有幾種不同類型的變量(用於文本)可以在每個幀中更新,例如float,int,unsigned int,bool和strings。雖然我明白需要使用atoi等一些東西將int轉換爲char *,但在思考「優雅」解決方案時出現了我的問題。我曾經想過做什麼有多個枚舉,如TEXT_IS_FLOAT,TEXT_IS_INT等,然後具有諸如SetTextAsFloat(float value)之類的函數,同時在某種更新循環上具有對象,因此它可以在每個時間步進行諸如aoti的轉換。我擔心這樣做是因爲代碼最終看起來非常麻煩,支持許多不同的值類型,並且沒有使用「良好的代碼設計」。

有沒有人知道我如何設計這樣一個系統來更新可以有多種類型的文本類型輸入的對象上的文本的任何建議?該類將如何存儲潛在的類型變量(最好沒有模板)。

回答

-1

在C++中,您擁有STL ostringstream,它的作用類似於流,但構造一個字符串而不是寫入文件。這裏有一個例子:

#include <sstream> // istringstream, ostringstream, stringstream 
#include <string> // for string objects 

using namespace std; // personally I don't like std::everything... 

// returns a string represented what was just updated 
string build_value() 
{ 
    int my_int; 
    bool my_bool; 
    float my_float; 
    // the above vars are updated somehow... 

    ostringstream s; // build a string using stream syntax 

    // and now the logic 

    if (updated_int) { 
     s << my_int; 
     return s.str(); // this is a string object 
    } 
    else if (updated_bool) { 
     s << my_bool; 
     return s.str(); 
    } 
    else if (updated_float) { 
     s << my_float; 
     return s.str(); 
    } 
} 

您還可以創建一個輔助模板函數:

template <typename T> 
string type_to_string(T t) 
{ 
    ostringstream s; 
    s << t; 
    return s.str(); 
} 

其上的數據流上定義的所有類型的作品。

+0

小錯字:應該是「模板」 –

+0

如何在類中存儲類型變量的示例如何? (沒有模板類)。 – chadb

+0

Vaughn Cato - 謝謝,修正了 –

相關問題