2

我正在开发我的 GUI 系统,我需要设计模式的帮助。

对于我的一个 GUI 元素,它可以包含需要在每个时间步更新的文本。但是,有几种不同类型的变量(用于文本)可以在每一帧更新,例如 float、int、unsigned int、bool 和 strings。虽然我理解需要使用一些东西,例如atoi将 int 转换为 char*,但在考虑“优雅”解决方案时会出现我的问题。我想过要做的事情有多个枚举,例如TEXT_IS_FLOAT,TEXT_IS_INT等,然后具有诸如, 之类的函数SetTextAsFloat(float value),同时将对象放在某种更新循环上,这样它就可以在每个时间步进行诸如 aoti 之类的转换。我担心这样做是因为代码最终会因为支持许多不同的值类型而显得非常繁琐,而且不使用“良好的代码设计”。

有谁知道关于我如何设计这样一个系统来更新可以具有多种类型的文本类型输入的对象上的文本的任何建议?类将如何存储潜在的类型变量(最好没有模板)。

4

1 回答 1

-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();
}

它适用于定义流的所有类型。

于 2012-05-06T20:00:58.233 回答