c++ - 传入一个 vector 作为具有设定值的参数

标签 c++ object vector constructor parameter-passing

概述:

我正在用 C++ 制作视频游戏,我需要有一个敌人可以掉落的元素列表,以及每个元素的掉落几率,但不同的敌人可能有不同数量的元素可以掉落。 我有一个 ActorDefinition 类,其构造函数定义了敌人的所有统计数据和事物。

问题来了:

如何将 vector 传递给具有任意定义值的对象构造函数?

例如,这是我希望能够像使用静态数组一样执行的操作:

//first array is item types to drop, second array is drop chances as percentages
ActorDefinition("actorname", [10, 2], [50, 90]);

这很好,而且只占用一行。但我不能这样做,因为我需要动态大小,因此我想使用 vector 。

所以我基本上需要这样做,(它可以工作并完成我想要的,但是非常困惑):

vector<int> drops;
drops.push_back(10);
drops.push_back(2);
vector<int> dropChances;
dropChances.push_back(50);
dropChances.push_back(90);
ActorDefinition("actorname", drops, dropChances); 

有没有一种方法可以做到这一点而无需像上面那样添加单独的代码行? (我有如此多的 Actor 定义和如此多的项目,如果我对每个都这样做,它会堆积成吨的烦人代码行)创建一个 vector 并用我的值推回每个索引?

编辑 - 修复了我的示例代码中的拼写错误

最佳答案

使用 C++11 的 direct list initialization语法你可以这样写:

vector<int> drops{10,2};
vector<int> dropChances{50,90};
ActorDefinition("actorname", drops, dropChances);

或者更简洁,但不一定更具可读性:

ActorDefinition("actorname", vector<int>{10,2}, vector<int>{50, 90});

最后,如果您的函数重载可以明确解决,您甚至可以使用 copy list initialization并这样调用它:

ActorDefinition("actorname", {10,2}, {50, 90});

不过要小心使用这个最终形式。例如,这有效:

void func(vector<int> a);
func({1,2});

但是添加另一个 func 重载会中断 func({1,2}) 调用:

void func(vector<int> a);
void func(set<int> a);
func({1,2});//ERROR! Call to func is ambiguous!

(请注意,上述所有示例还修复了您在添加 5090 时在代码中重复的 push_back 中的拼写错误drops 而不是 dropChances :))

关于c++ - 传入一个 vector 作为具有设定值的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29218185/

相关文章:

javascript - `throw new Error` 和 `throw someObject` 和有什么区别?

javascript - 从嵌套对象数组中获取具有空值的对象

java - Arraylist<Object []> 到 Object[][]

c++ - 仅当有足够内存可用时 vector push_back

c++ - vector 删除迭代器

c++ - MakeFile.am : Mixing c and c++, 新错误

c++ - 如何绕过不受支持的 C++11 代码

c++ - MySQL C++连接器链接错误

c++ - 我怎么知道我是在开发 c++/cx 还是 c++/WinRT UWP 应用程序?

c++ - 将 `push_back()` 与多维 vector 一起使用