我正在编写一个游戏引擎。
因此,每个node
都有一些属性。
为此,我设置了array
struct
,如下所示:
struct propertyTemplate {
propertyTemplate (QString namei, QString valuei, QString expectedi, bool changedi = false) {
name = namei;
value = valuei;
expected = expectedi;
changed = changedi;
}
QString name;
QString value;
QString expected; //What the programm expects;
bool changed = false; //if these are the default values
};
-
std::vector<propertyTemplate> properties;
这在运行时填充如下:
properties.push_back(propertyTemplate("Name", "creativeName", "string"));
properties.push_back(propertyTemplate("Sprite-link", "", "link"));
properties.push_back(propertyTemplate("Height", "100", "float"));
properties.push_back(propertyTemplate("Width", "100", "float"));
properties.push_back(propertyTemplate("Position X", "0", "float"));
properties.push_back(propertyTemplate("Position Y", "0", "float"));
properties.push_back(propertyTemplate("Rotation", "0", "string"));
这一切都被填充到treeWidget
和现在的捕获:
当用户更改属性时,如何将其也放入包含属性数组的类的变量中?
class CSprite2D {
private:
std::vector<propertyTemplate> properties;
QString name; //I want the value of "name" in propertyTemplate
//to go into here BUT by JUST changing the
//value in properties, as I don't know (from an external class) which variable contains which value.
}
-
我不想要一个简单有效的解决方案(这将是一个检查属性是否已更改的while循环),但也是一个优雅而且并不意味着具有偷偷摸摸的解决方法的解决方案。< / p>
这些例子都是虚构的,所以不要介意编程错误
BTW:由于我是C ++的新手,我可能会忘记一些关键的东西。 在这种情况下,我真的很抱歉答案 0 :(得分:0)
首先,关于编码风格: 你正在使用什么编译器?通常你不需要这样的构造函数,使用C ++ 11(或C99)你可以使用语法:
struct propertyTemplate s {QString(name),QString(value),QString(expectedi)};
使用初始化列表
是正确的propertyTemplate (QString namei, QString valuei, QString expectedi, bool changedi = false):
name(namei),
value(valuei),
expected(expectedi),
changed(changedi)
{}
Yu可能会尝试使用类似观察者的模式,这将使用[[指向类成员的指针]],它必须在更改特定值时更新