gpt4 book ai didi

c++ - 为容器内保存的指针和非指针类型数据创建模板函数重载

转载 作者:太空狗 更新时间:2023-10-29 21:23:37 24 4
gpt4 key购买 nike

我正在尝试创建一个为指针和非指针重载的模板函数。我这样做了,效果很好。

    template<class D, class V>
bool Same(D d, V v){ return d == v; }

template<class D, class V>
bool Same(D* d, V v) { return *d==v;}

现在我想扩展它,使模板化容器成为参数,并且必须有一个版本用于带指针的容器和另一个用于非指针的容器。我无法弄清楚。我试过了,但没用。

    template< template<class> class Container, class Data, class Value>
bool func(Container<Data> &c, Value v)
{
return c[0] == v;
}

template< template<class> class Container, class Data, class Value>
bool func(Container<Data*> &c, Value v)
{
return *c[0] == v;
}

错误 c2040 表示 int* 在间接级别上与 int 不同,指向第一个函数。

我怎样才能让它工作?

其余代码

template<class D>
class Vec
{
std::vector<D> m_vec;
public:
void push_back(D d) { m_vec.push_back(d); }
D operator[](int i) { return m_vec[i]; }
};
void test_template()
{
Same<int, int>(2,3);
Info i = {4};
Same<Info, int>(i, 2);
Info ii = {2 };
Info *pi = &ii;
Same<Info, int>(pi, 2);

Vec<int> iv;
iv.push_back(3);
func<Vec, int, int>(iv, 3);
Vec<int*> pv;
pv.push_back(new int(3));
func<Vec, int*, int>(pv, 3);
}

最佳答案

第二次调用 func , 第二个模板参数应该是 int , 不是 int * .否则,第二个 func declaratino 将查找 Vec<int **>作为第一个模板参数(因为它有自己的指针)。

func<Vec, int, int>(pv, 3);

编辑:如 DyP 所述,您也可以完全省略模板参数,因为编译器应该能够从实际的函数参数中推断出它们。

关于c++ - 为容器内保存的指针和非指针类型数据创建模板函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17843714/

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