gpt4 book ai didi

c++ - 允许每个时间步将多种类型转换为文本

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:03:32 26 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

关于c++ - 允许每个时间步将多种类型转换为文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10473693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com