gpt4 book ai didi

c++ - 对于相互转换的类型,有没有办法绕过 "deduced conflicting types for parameter in template instantiation"?

转载 作者:行者123 更新时间:2023-11-30 02:41:01 26 4
gpt4 key购买 nike

我正在玩弄自己的迭代器包装器,它是根据迭代器类型模板化的。它工作正常,但是当我尝试在混合迭代器和 vector 迭代器的算法中使用它时出现问题。

vector<int> vi{1,2,3,4,5};                                                 
auto my_it2 = my_find(vi,2);
cout << *my_it2;// works fine
// but this does not:
vector<int> vi2 (vi.begin(), /*(std::vector<int>::iterator)*/my_it2);

include/c++/4.8/bits/stl_vector.h:392:9: note: candidate template ignored: deduced conflicting types for parameter '_InputIterator'

my_it 结构有一个用于转换为普通迭代器的运算符(这就是为什么如果你取消注释“cast”它可以工作,但它很丑。
有办法解决这个问题吗?
我对此表示怀疑,因为即使 std::max 也不适用于 short 和 int,但最好检查一下 SO。 :)

最佳答案

我不认为你可以,你从 std::vector 调用的构造函数是一个函数模板,并且在模板参数推导期间不允许隐式类型转换。所以你必须确保它们是同一类型的迭代器。

您可以创建一个非成员和非模板函数(或 vector::iterator 和您的迭代器的模板函数规范)通过采用不同的迭代器来构造一个 vector ,基本上隐藏函数中的“丑陋”位.

关于c++ - 对于相互转换的类型,有没有办法绕过 "deduced conflicting types for parameter in template instantiation"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28523925/

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