2012-05-06 31 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 - 谢谢,修正了 –

相关问题