该键将是一个字符串,并且该值将是任何类型的向量。是否可以创建一个向量图,其中向量可以是任何类型的?
例如,第一个键可以映射到整数的矢量,第二个键可映射到浮点的矢量。在C++中可能吗?
如果没有,我可以通过其他方式达到类似的效果吗?
该键将是一个字符串,并且该值将是任何类型的向量。是否可以创建一个向量图,其中向量可以是任何类型的?
例如,第一个键可以映射到整数的矢量,第二个键可映射到浮点的矢量。在C++中可能吗?
如果没有,我可以通过其他方式达到类似的效果吗?
任何类型?你可以考虑使用Boost.Any。然后你的类型是:
std::map<std::string, std::vector<boost::any> >
我认为向量中的元素需要一致的类型。地图中每个键的不同类型的矢量。 –
嗯,你可以这样做:
std::map<std::string, std::vector<boost::any> >
但它是非常不可能的,这是你真正想要的东西。你为什么认为你需要这个?
我有一个opengl渲染器,目前用java编写,但被移植到C++。在这个渲染器中,我试图隔离可以改变缓冲区和着色器的部分。所以我有一个registerBuffer和registerShader函数。 registerBuffer函数将着色器变量名称(字符串)映射到缓冲区。但缓冲区可以是GLfloat或GLushort。所以现在我想能够将着色器变量名映射到GLfloat或GLushort的矢量。
那么,你可以使用std::map<std::string, boost::variant<GLfloat, GLushort>>
然后。
或者'map
@John:可能,但泽维尔特别询问了一个映射到向量:) – fredoverflow
取决于哪一个更重要 - 值被类型限制为向量,或者向量一旦找到它就受到类型的约束。 –
一个vector<T>
的值都必须是同一类型T
和一个map<K,V>
的值都必须V
类型,是vector<T>
一些T
的,所以,不,不开箱的,但你可以得到周围的类型为Boost.Any库。
boost :: any解决方案似乎对我来说是一个黑客攻击。我建议你看看你的渲染器的面向对象设计。
你需要的是一个具有字符串键和缓冲区作为值的映射,正确吗?然后编写一个Buffer
类,它可以在内部保存任何类型的OpenGL缓冲区,并使每个实例都跟踪它所保存的缓冲区的类型。这个类的数据存储可以是一个通用的void*
,然后在需要将缓冲区发送到OpenGL时将其转换为正确的类型。
然后,你的数据结构问题尚未完全解决,你可以这样做:
std::map<std::string, Buffer>
好运。
更迫切的问题是为什么你认为你需要这个。 – delnan
基本上没有。通过其他手段?绝对。为什么? –
它可以完成,但可能不应该。这是纯粹的学术,还是你想做点什么? – Beta