【问题标题】:C++ template container without class/struct?没有类/结构的 C++ 模板容器?
【发布时间】:2014-06-24 21:52:03
【问题描述】:

是否可以有一个包含不同类型值的容器? 比如:

template<class Value>
std::map<std::string, Value> values;

【问题讨论】:

  • 你可以为void*创建一个容器
  • 从严格的 C++ 类型的角度来看,答案是否定的。从实用的角度来看,还有其他选择。如果您可以发布您想要完成的内容,您可能会获得更多有用的反馈。
  • std::map&lt;std::string, boost::any&gt;
  • 感谢 AK_ 和 Praetorian 我需要这样的东西。我刚刚意识到 float* 在我正在做的事情中就足够了。 (Shader 类中的制服容器(向量、矩阵...))

标签: c++ templates containers


【解决方案1】:

我不明白你为什么要这样做,你能澄清一下吗?

您不应该在一个地图中混合使用不同的对象类型。如果你这样做,你怎么知道每个单元格中存储的是哪种类型?

如果你想存储一些自定义的类,最好创建一个父类,并使用这个父类的映射,然后你可以毫无问题地添加子类。

【讨论】:

  • 如果我知道我存储在地图中的每种不同类型的值都有一个像“getFloatArray()”这样的方法,例如,不需要知道类型,我可以简单地做“float * value = mymap[string].getFloatArray()" (这就是我需要的,矩阵、向量等的浮点数组,但我意识到我可以简单地使用 float* 作为容器)
  • 是的,你可以这样做,但是如果你想做对,如果你所有的类都需要有 getFloatArray() 方法,那么你应该用这个方法创建一个基类并创建和数组与这堂课。这是一个更好的设计,您将避免将来出现问题。
猜你喜欢
  • 2016-11-07
  • 2017-04-18
  • 2013-05-11
  • 2020-05-22
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 2011-06-22
  • 2013-01-22
相关资源
最近更新 更多