我正在使用我的GUI系统,我需要设计模式的帮助。
对于我的一个GUI元素,它可以包含每个时间步都需要更新的文本。但是,有几种不同类型的变量(对于文本)可以每帧更新,例如float,int,unsigned int,bool和strings。虽然我理解需要使用诸如atoi
之类的东西将int转换为char *,但在考虑“优雅”解决方案时,我的问题就出现了。我曾经想过做多个枚举的事情,比如TEXT_IS_FLOAT
,TEXT_IS_INT
等,然后有SetTextAsFloat(float value)
这样的函数,同时让对象在某种更新循环上,这样就可以了每时每刻都做一次转换,比如奥蒂。我担心这样做是因为代码最终看起来非常麻烦,支持很多不同的值类型,而且没有使用“良好的代码设计”。
有没有人知道我如何设计这样一个系统来更新一个对象的文本,该对象可以有多种类型的文本类型输入?该类如何存储潜在的类型变量(最好没有模板)。
答案 0 :(得分:-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();
}
适用于定义流的所有类型。