gpt4 book ai didi

c++ - 函数参数 : vector& vs vector&

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:48 24 4
gpt4 key购买 nike

我有两个作用于 Clazz 类型对象的函数,它们之间的唯一区别是我访问其成员的方式:

void foo(vector<Clazz*>& v) {
...
v[0]->method();
...
}

void foo(vector<Clazz>& v) {
...
v[0].method();
...
}

将不使用 v 的代码外包并编写一个简单的包装函数是不可能/不切实际的。我可以在循环中简单地将一种 vector 类型转换为另一种 vector 类型,然后将新 vector 传递给该函数的一个标准化版本,但我需要一个支持这两种变体的快速解决方案。

有没有办法合并这两种功能并仍然保留两种输入类型的灵 active ?

最佳答案

是的。这就是模板函数的用途。

您将不得不以某种方式抽象掉“[您]访问其成员的方式”。也许通过一个额外的模板 lambda 参数,它提供了一种访问成员的抽象方法。或者,也许,通过帮助程序重载。

Clazz &gimme(Clazz &c) { return c; }

Clazz &gimme(Clazz *c) { return *c; }

然后,让你的模板函数:

template<typename vector_t> void foo(vector_t & v)

...调用 gimme(v[n]) 以访问 vector 中的每个成员。

关于c++ - 函数参数 : vector<Clazz*>& vs vector<Clazz>&,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38674970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com