如何在 C++ 中创建哈希值的哈希值?
有没有办法在 C++ 中创建哈希值的哈希值?
实际上,我正在尝试做你可以在 Perl 中做的事情,但只能在 C++ 中做。 这是我希望在 C++ 中发生的 Perl 代码示例。
%hash = (
gameobject1 => {
position => {
x_loc => 43,
y_loc => 59,
}
rect_size => {
width => 5,
height => 3,
}
collidable => 1,
sounds => {
attack => "player_attack.ogg",
jump => "player_jump1.ogg",
jump_random => [qw/player_jump1.ogg player_jump2.ogg player_jump3.ogg/]
}
},
gameobject2 => {
position => {
x_loc => 24,
y_loc => 72,
}
rect_size => {
width => 2,
height => 4,
}
sounds => {
attack => "goblin_attack.ogg",
}
items => [qw/sword helmet boots/]
},
);
要注意的是游戏对象中的哈希值可以存在或不存在...即位置可能存在于游戏对象 1 中,但可能不存在于游戏对象 35 中。
有什么想法吗?
Is there a way to create a hash of hashes in C++?
Effectively I am trying to do what you can do in Perl but only in C++.
Here is an example of Perl code I would like to have happen in C++
%hash = (
gameobject1 => {
position => {
x_loc => 43,
y_loc => 59,
}
rect_size => {
width => 5,
height => 3,
}
collidable => 1,
sounds => {
attack => "player_attack.ogg",
jump => "player_jump1.ogg",
jump_random => [qw/player_jump1.ogg player_jump2.ogg player_jump3.ogg/]
}
},
gameobject2 => {
position => {
x_loc => 24,
y_loc => 72,
}
rect_size => {
width => 2,
height => 4,
}
sounds => {
attack => "goblin_attack.ogg",
}
items => [qw/sword helmet boots/]
},
);
The thing to note is the hashes with in gameobjects can exist or not... i.e. position might exist in gameobject1 but may not exist for gameobject35.
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Perl 哈希允许您使用任何值。 C++ 是一种静态类型语言,它不允许您这样做:您必须准确指定您希望散列(在 C++ 术语中,即映射)中的值具有的类型。
这是使用 C++11 和 boost 的可能解决方案,其中包含一些强类型:)
如果您确实想要像 Perl 散列的 Perl 散列之类的东西,您可以使用 std::map获得在地图中存储任何内容的能力。但是,这要求您在从映射获取每个值之前测试其类型。如果只能使用一组特定类型,则可以使用比
boost::any
更强类型的内容,例如boost::variant
。Perl hashes let you use anything for values. C++ being a statically typed language, it won't let you do that: you have to specify exactly what type you want the values in the hash (in C++ lingo, the map) to have.
Here's possible solution with C++11 and boost, with some strong typing thrown in :)
If you really want something like a Perl hash of Perl hashes, you can use
std::map<std::string, boost::any>
to get the ability to store anything in the map. However, this requires you to test for the types of every value before obtaining it from the map. If only a certain set of types is possible, you can use something more strongly-typed thanboost::any
, likeboost::variant
.使用 std::map 吗?
像这样的东西:
Use std::map?
Something like:
这个例子可以帮助您理解实现:
干杯...:)
This example can help you to understand the implementation:
Cheers...:)