【问题标题】:c++: Initialize struct with one array containing all argumentsc++:用一个包含所有参数的数组初始化结构
【发布时间】:2009-10-30 12:53:16
【问题描述】:

我目前正在开发一个小型标记器模板函数,该函数还将标记转换为不同的对象。只要我投射的所有结构都具有相同数量的项目,这真的很好。我想知道的是将函数转换为具有任意数量项目的结构。现在对我来说功能的瓶颈是: 当它是固定数量(在本例中为三个)的项目时,我这样做了:

mystruct holder = {items[i], items[i+1], items[i+2]};

现在我能够转换为具有不同项目的结构的想法是将所有项目放入一个数组中(所有结构项目将属于同一类型)并像这样简单地初始化它:

float values[numItems];
for(int j=0; j<numItems; j++) values[j] = items[i+j]
mystruct holder = {values};

但不幸的是你不能像这样初始化一个结构。有人知道如何实现这一目标吗? 谢谢!

【问题讨论】:

  • mystruct 是什么样的?看来您应该使用 std::list 或向量
  • 嘿,mystruct 基本上很简单,像这样的东西: template struct Vertex{ T x,y,z; };或:模板 struct TexCoord{ T u,v; };

标签: c++ arrays struct


【解决方案1】:

您可以只使用将数组作为参数的构造函数。结构基本上是类,但默认成员可见性是公共而不是私有。

【讨论】:

  • 谢谢,我也想过这个问题,但是我必须让它们像这样指针:mystruct * holder = new mystruct(values);我不想这样做。也许我可以添加一个初始化函数之类的?所以我可以这样做:mystruct 持有者;持有人.init(值);还有其他想法吗?谢谢!
  • 啊,我忘了,我不能像这样投射一个对象:mystruct holder(values);
  • 是的,这不是强制转换,但您会将“值”传递给结构的构造函数(在本例中为“holder”)
  • @moka:使用构造函数不需要指针。正如 Mutmansky 指出的那样,您第二条评论中的那行就可以了。
猜你喜欢
  • 2020-05-28
  • 2018-08-11
  • 2022-12-03
  • 2015-05-04
  • 1970-01-01
  • 1970-01-01
  • 2017-01-05
  • 2011-05-09
  • 1970-01-01
相关资源
最近更新 更多